Slide 1

Slide 1 text

%FNZTUJGZ4XJGU6*ཁ໿ f o r : 6 . & . * T X J G U G F BU ) " , "5" T X J G U 
 ʙ 8 8 % $ 3F DBQ ʙ

Slide 2

Slide 2 text

} var employedBy = "YUMEMI Inc." var job = "iOS Tech Lead" var favoriteLanguage = "Swift" var twitter = "@lovee" var qiita = "lovee" var github = "el-hoshino" var additionalInfo = """ Πψ೿Ͱ͕͢ɺԿ͔ʁ """ final class Me: Developable, Talkable {

Slide 3

Slide 3 text

˞ೣͰྫΛ্͍͛ͯ·͕͢ɺൃදऀ͸Πψ೿Ͱ͢ɻ

Slide 4

Slide 4 text

࣌ؒ ҧ͏࣌ؒͷ ಉ͡ೣʁ

Slide 5

Slide 5 text

࣌ؒ ͦ΋ͦ΋ 
 ҧ͏ೣʁ

Slide 6

Slide 6 text

ࣸਅ͚ͩͰ͸൑அ͕Ͱ͖ͳ͍ w ҧ͏ೣͰ΋ͱͯ΋ࣅͯΔ͔΋͠Εͳ͍ w ಉ͡ೣͰ΋࣌ظʹΑͬͯݟͨ໨͕ҧ͏͔΋͠Εͳ͍ w ൑அ͢ΔͨΊʹ͸௥Ճͷ৘ใ͕ඞཁ w ໊લ w ೒࠼ w FUD *EFOUJUZ

Slide 7

Slide 7 text

4XJGU6*Λཧղ͢ΔͨΊͷେϙΠϯτ w *EFOUJUZ w -JGFUJNF w %FQFOEFODZ 4XJGU6*͕͋ͳͨͷࢥ͏௨Γͷಈ࡞Λ͍ͯ͠ͳ͔ͬͨΒɺ 
 େ఍͸͜ΕΒͷѻ͍͕ؒҧ͍ͬͯΔ͔Βɻ

Slide 8

Slide 8 text

*EFOUJUZ w େϙΠϯτͷதͰ΋Ұ൪ॏཁ w -JGFUJNF΋%FQFOEFODZ΋ɺ*EFOUJUZ͕͋Δ͔Β ͦ͜੒Γཱͭ w 4XJGU6*ʹ͸छྨͷ*EFOUJUZ͕͋Δ w &YQMJDJU*EFOUJUZʢ໌ࣔత*%ʣ w 4USVDUVSBM*EFOUJUZʢߏ଄త*%ʣ

Slide 9

Slide 9 text

&YQMJDJU*EFOUJUZ w ಈతʹมΘΔϏϡʔʹɺ ΤϯδχΞ͕͚ͭΔ*% w ର৅͕Identifiable ʹద߹͍ͯ͠ͳ͍৔߹͸ *%΁ͷKeyPathΛࢦఆ ͢Δඞཁ͕͋Δ ForEach(cats, id: \.name) { cat in Text("\(cat.age)ࡀ") } Explicit Identity

Slide 10

Slide 10 text

&YQMJDJU*EFOUJUZʹٻΊΒΕΔੑ࣭ w ϢχʔΫੑ w ଞͷର৅ͱඃͬͯ͸͍ ͚ͳ͍ w ෆมੑ w ͍ͭɺԿճݺͼग़ͯ͠ ΋มΘͬͯ͸͍͚ͳ͍ ForEach(cats, id: \.name) { cat in Text("\(cat.age)ࡀ") } Explicit Identity

Slide 11

Slide 11 text

4USVDUVSBM*EFOUJUZ w ߏ଄ʹΑͬͯࣗಈతʹ෇ ͚ΒΕΔ*% w JGจ΍TXJUDIจͷ෼ذ ͕͋ͬͨΒҧ͏*%͕෇ ͚ΒΕΔ Structural Identity if flag { Text("A") } else { Text("B") }

Slide 12

Slide 12 text

4USVDUVSBM*EFOUJUZͱͷ෇͖߹͍ํ w ಉ͡ϏϡʔͳΒɺ෼ذΛ ͯ͠͸ߦ͚ͳ͍ w ෼ذΛͤͣʹ͏·͘ *OFSU.PEJ fi FSͳͲΛ ׆༻ Structural Identity if flag { Text("A") } else { Text("B") } ద༻ͯ͠΋ϏϡʔͷඳըʹӨڹ͠ͳ͍.PEJ fi FSɻ PQBDJUZ QBEEJOH FUD

Slide 13

Slide 13 text

ͳͥ*EFOUJUZ͕ॏཁ͔ w "OJNBUJPO͢Δͱ͖ͳͲͷ൑அࠜڌ w Ҡಈ͢΂͖͔ΫϩεϑΣʔυ͢΂͖͔ w Ϗϡʔͷ-JGFUJNFΛܾΊΔࠜڌ w ඞཁͳ͘ͳͬͨΒϝϞϦ͔Βফ͢

Slide 14

Slide 14 text

-JGFUJNF w 4XJGU6*ͷϏϡʔλΠϓ͸஋ܕ w ϏϡʔλΠϓ͸ͨͩͷϏϡʔඳըϨγϐ w ϏϡʔλΠϓͷΠϯελϯεࣗମ͸ඇৗʹ୹໋ w ͔͠͠Ϗϡʔͷੜଘظؒ͸΋ͬͱ௕͍ w Ϗϡʔ͸ඞཁ͕͋ͬͨΒੜ੒͞Εɺඞཁͳ͘ͳͬͨΒফ͞ΕΔ w ੜ੒͞ΕͨΒonAppearɺফ͞ΕͨΒonDisappear͕ݺ ͹ΕΔ w @State΍@StateObject΋Ϗϡʔ͕ඞཁͳ͘ͳͬͨΒফ ͞ΕΔ

Slide 15

Slide 15 text

-JGFUJNF fl BHUSVF UBQ ࣌ؒ fl BHGBMTF struct Demo: View { var flag: Bool var body: some View { if flag { Counter() .background(Color.blue) } else { Counter() .background(Color.red) } } } struct Counter: View { @State private var count = 0 var body: some View { Text("\(count)") .onTapGesture { count += 1 } } } fl BHUSVF ফ͞ΕΔ

Slide 16

Slide 16 text

-JGFUJNF fl BHUSVF UBQ ࣌ؒ fl BHGBMTF struct Demo: View { var flag: Bool var body: some View { Counter() .background( flag ? Color.blue : Color.red ) } } struct Counter: View { @State private var count = 0 var body: some View { Text("\(count)") .onTapGesture { count += 1 } } } fl BHUSVF ফ͞Εͳ͍ Dependency

Slide 17

Slide 17 text

%FQFOEFODZ w %FQFOEFODZ͸ͨͩͷϏϡʔͷೖྗ w @State΍@StateObject͚ͩͰͳ͘ɺ @Binding΍ͨͩͷvar΋શͯ%FQFOEFODZ w bodyҎ֎શͯ%FQFOEFODZͱߟ͑ͯ໰୊ͳ͍ w %FQFOEFODZ͕มΘͬͨΒɺͦΕʹඥͮ͘Ϗϡʔ͕ ࠶ඳը͞ΕΔ w CPEZ͕ݺ͹Ε࣮ͯߦ͞ΕΔ

Slide 18

Slide 18 text

%FQFOEFODZ 7JFX 7JFX 7JFX 7JFX %FQFOEFODZ %FQFOEFODZ %FQFOEFODZ

Slide 19

Slide 19 text

·ͱΊ w *EFOUJUZΛ੍͢Δ΋ͷ͸4XJGU6*Λ੍͢Δ w -JGFUJNFΛ஫ҙ͠ͳ͍ͱඞཁͳঢ়ଶ͕ফ͑ͯ͠·͏ w %FQFOEFODZͰ࠷ඳը͢ΔϏϡʔΛநग़͍ͯ͠Δ

Slide 20

Slide 20 text

ࢀߟ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED