Slide 1

Slide 1 text

1IBOUPN5ZQFͰίϯύΠϧ࣌ʹ ঢ়ଶνΣοΫΛ͢Δ TIJCVZBTXJGU ,B[VIJSP)BZBTIJ

Slide 2

Slide 2 text

1IBOUPN5ZQFͱ͸ ཁ͸ܕύϥϝʔλΛ࢖ͬͯɺ ݟͨ໨্ݱΕͳ੍͍໿Λ෇͚Δ͜ͱΒ͍͠

Slide 3

Slide 3 text

1IBOUPN5ZQFͱ͸ ༓ྶΈ͍ͨͳܕ ཁ͸ܕύϥϝʔλΛ࢖ͬͯɺ ݟͨ໨্ݱΕͳ੍͍໿Λ෇͚Δ͜ͱΒ͍͠

Slide 4

Slide 4 text

1IBOUPN5ZQFͱ͸ ༓ྶΈ͍ͨͳܕ 1IBOUPN5ZQF ཁ͸ܕύϥϝʔλΛ࢖ͬͯɺ ݟͨ໨্ݱΕͳ੍͍໿Λ෇͚Δ͜ͱΒ͍͠

Slide 5

Slide 5 text

ྫ͑͹ʜ

Slide 6

Slide 6 text

1IBOUPN5ZQFΛ࢖ͬͨ Ϋϥεఆٛ class PokemonStateType {} class Struggle: PokemonStateType {} // ઓಆঢ়ଶ class Calm: PokemonStateType {} // ٳܜঢ়ଶ class Pokemon { static func use() -> Pokemon { return Pokemon() } func ready() -> Pokemon { return Pokemon() } } extension Pokemon where T: Struggle { func attack() {} }

Slide 7

Slide 7 text

1IBOUPN5ZQFΛ࢖ͬͨ Ϋϥεఆٛ class PokemonStateType {} class Struggle: PokemonStateType {} // ઓಆঢ়ଶ class Calm: PokemonStateType {} // ٳܜঢ়ଶ class Pokemon { static func use() -> Pokemon { return Pokemon() } func ready() -> Pokemon { return Pokemon() } } extension Pokemon where T: Struggle { func attack() {} } ঢ়ଶΛܕύϥϝʔλͱͯ࣋ͭ͠ϙέϞϯΫϥεΛ࡞੒͢Δ

Slide 8

Slide 8 text

1IBOUPN5ZQFΛ࢖ͬͨ Ϋϥεఆٛ class PokemonStateType {} class Struggle: PokemonStateType {} // ઓಆՄೳঢ়ଶ class Calm: PokemonStateType {} // ઓಆෆՄঢ়ଶ class Pokemon { static func use() -> Pokemon { return Pokemon() } func ready() -> Pokemon { return Pokemon() } } extension Pokemon where T: Struggle { func attack() {} } ϙέϞϯ͸ʮઓಆঢ়ଶʯͱʮٳܜঢ়ଶʯΛ࣋ͭ class PokemonStateType {} class Struggle: PokemonStateType {} // ઓಆঢ়ଶ class Calm: PokemonStateType {} // ٳܜঢ়ଶ class Pokemon { static func use() -> Pokemon { return Pokemon() } func ready() -> Pokemon { return Pokemon() } } extension Pokemon where T: Struggle { func attack() {} }

Slide 9

Slide 9 text

1IBOUPN5ZQFΛ࢖ͬͨ Ϋϥεఆٛ class PokemonStateType {} class Struggle: PokemonStateType {} // ઓಆՄೳঢ়ଶ class Calm: PokemonStateType {} // ઓಆෆՄঢ়ଶ class Pokemon { static func use() -> Pokemon { return Pokemon() } func ready() -> Pokemon { return Pokemon() } } extension Pokemon where T: Struggle { func attack() {} } ઓಆঢ়ଶͷ࣌͸BUUBDL ͕࣮ߦՄೳ class PokemonStateType {} class Struggle: PokemonStateType {} // ઓಆঢ়ଶ class Calm: PokemonStateType {} // ٳܜঢ়ଶ class Pokemon { static func use() -> Pokemon { return Pokemon() } func ready() -> Pokemon { return Pokemon() } } extension Pokemon where T: Struggle { func attack() {} }

Slide 10

Slide 10 text

1PLFNPOΫϥεΛ࢖ͬͯΈΔ let pokemon = Pokemon.use() pokemon.attack() // -> ίϯύΠϧ࣌ʹΤϥʔ pokemon.ready().attack() // -> ͬͪ͜͸ίϯύΠϧΤϥʔ͕ग़ͳ͍

Slide 11

Slide 11 text

1PLFNPOΫϥεΛ࢖ͬͯΈΔ let pokemon = Pokemon.create() pokemon.attack() // -> ίϯύΠϧ࣌ʹΤϥʔ pokemon.ready().attack() // -> ͬͪ͜͸ίϯύΠϧΤϥʔ͕ग़ͳ͍ ܕύϥϝʔλʹ$BMN͕࣋ͭ৔߹ɺBUUBDL ϝιο υ͸ݺ΂ͳ͍ let pokemon = Pokemon.use() pokemon.attack() // -> ίϯύΠϧ࣌ʹΤϥʔ pokemon.ready().attack() // -> ͬͪ͜͸ίϯύΠϧΤϥʔ͕ग़ͳ͍

Slide 12

Slide 12 text

1PLFNPOΫϥεΛ࢖ͬͯΈΔ let pokemon = Pokemon.create() pokemon.attack() // -> ίϯύΠϧ࣌ʹΤϥʔ pokemon.ready().attack() // -> ͬͪ͜͸ίϯύΠϧΤϥʔ͕ग़ͳ͍ ܕύϥϝʔλʹ4USVHHMFΛ࣋ͭ1PLFNPOͷ৔߹ɺ BUUBDL ϝιου͕ݺ΂Δ let pokemon = Pokemon.use() pokemon.attack() // -> ίϯύΠϧ࣌ʹΤϥʔ pokemon.ready().attack() // -> ͬͪ͜͸ίϯύΠϧΤϥʔ͕ग़ͳ͍

Slide 13

Slide 13 text

ݟ্͔͚͸Ӆ͞ΕͨܕΛ࢖ͬͯ ঢ়ଶ؅ཧ͕Ͱ͖ͨʜ

Slide 14

Slide 14 text

࣮༻ྫ

Slide 15

Slide 15 text

IUUQTHJUIVCDPNLB[VIJSP4USJOH4UZMJ[FS

Slide 16

Slide 16 text

4USJOH4UZMJ[FS w /4"UUSJCVUFE4USJOHΛܕʹΑͬͯ࢖͍΍͘͢͠ ͨϥΠϒϥϦΛ࡞Γ·ͨ͠ w 1IBOUPN5ZQFʹΑͬͯൣғબ୒தͱελΠϧ ద༻தͷঢ়ଶΛ੾Γସ͑Δ

Slide 17

Slide 17 text

4USJOH4UZMJ[FS let msg = “shibuya.swift".stylize() .range(0..<7) .color(0x009911).font(.HelveticaNeue) .range(8..

Slide 18

Slide 18 text

ঢ়ଶભҠਤͱͯ͠·ͱΊΔͱ ܕύϥϝʔλΛ੾Γସ͑Δ͜ͱͰঢ়ଶΛߦͬͨΓདྷͨ Γ͠ͳ͕Βɺద੾ͳϝιουΛίʔϧ͢Δ

Slide 19

Slide 19 text

ঢ়ଶʹΑͬͯ ίϯύΠϧΤϥʔ͕ى͖Δ // ൣғબ୒ͨ͋͠ͱͰԿ͔ελΠϧΛద༻͍ͯ͠ͳ͍ͱίϯύΠϧΤϥʔ label.attributedText = "shibuya.swift".stylize().range(0..<7).attr // ൣғબ୒ޙʹ৭Λద༻͍ͯ͠ΔͷͰίϯύΠϧʹ௨Δ label.attributedText = "shibuya.swift".stylize().range(0..<7).color(0x009911).attr ྫ͑͹6*-BCFMʹରͯ͠ɺจࣈྻͷ͋Δൣғͷ ΈελΠϧΛద༻ͯ͠୅ೖ͢Δ৔߹Λߟ͑Δ

Slide 20

Slide 20 text

ঢ়ଶʹΑͬͯ ίϯύΠϧΤϥʔ͕ى͖Δ // ൣғબ୒ͨ͋͠ͱͰԿ͔ελΠϧΛద༻͍ͯ͠ͳ͍ͱίϯύΠϧΤϥʔ label.attributedText = "shibuya.swift".stylize().range(0..<7).attr // ൣғબ୒ޙʹ৭Λద༻͍ͯ͠ΔͷͰίϯύΠϧʹ௨Δ label.attributedText = "shibuya.swift".stylize().range(0..<7).color(0x009911).attr ൣғબ୒Λ͍ͯ͠Δ࣌͸ɺͦͷޙͰඞͣελΠ ϧͷద༻Λ͢Δඞཁ͕͋Δ

Slide 21

Slide 21 text

ঢ়ଶʹΑͬͯ ίϯύΠϧΤϥʔ͕ى͖Δ // ൣғબ୒ͨ͋͠ͱͰԿ͔ελΠϧΛద༻͍ͯ͠ͳ͍ͱίϯύΠϧΤϥʔ label.attributedText = "shibuya.swift".stylize().range(0..<7).attr // ൣғબ୒ޙʹ৭Λద༻͍ͯ͠ΔͷͰίϯύΠϧʹ௨Δ label.attributedText = "shibuya.swift".stylize().range(0..<7).color(0x009911).attr ελΠϧΛద༻ͨ͠ޙ͸ɺผͷελΠϧΛద༻ ͢Δ͔/4"UUSJCVUFE4USJOHͱͯ͠୅ೖͰ͖Δ

Slide 22

Slide 22 text

1IBOUPN5ZQF·ͱΊ w ܕύϥϝʔλʹΑͬͯΦϒδΣΫτͷৼΔ෣͍ ʹ੍໿Λ༩͑ΒΕΔ w ίϯύΠϥʹΑͬͯਖ਼͍͠ৼΔ෣͍Λ͍ͯ͠Δ͔ Ͳ͏͔νΣοΫͰ͖Δ w ؒҧͬͯͨΒ͝ΊΜ

Slide 23

Slide 23 text

΋͠Կ͔͏·͍࢖͍ํ͕͋Ε͹ ڭ͑ͯԼ͍͞N @@ N

Slide 24

Slide 24 text

ࢀߟࢿྉ w 4XJGUͰ1IBOUPN5ZQF ༓ྶܕ  w IUUQRJJUBDPNUBLFUPJUFNTFGEFDEF w 'VODUJPOBM4OJQQFU1IBOUPN5ZQFT w IUUQTXXXPCKDJPCMPHGVODUJPOBMTOJQQFUQIBOUPNUZQFT w LB[VIJSP4USJOH4UZMJ[FS w IUUQTHJUIVCDPNLB[VIJSP4USJOH4UZMJ[FS