Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Demystify SwiftUI 要約 / Summary of Demystify SwiftUI

Demystify SwiftUI 要約 / Summary of Demystify SwiftUI

Elvis Shi

June 28, 2021
Tweet

More Decks by Elvis Shi

Other Decks in Programming

Transcript

  1. %FNZTUJGZ4XJGU6*ཁ໿
    f o r : 6 . & . * T X J G U G F BU ) " , "5" T X J G U

    ʙ 8 8 % $ 3F DBQ ʙ

    View Slide

  2. }
    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 {

    View Slide

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

    View Slide

  4. ࣌ؒ
    ҧ͏࣌ؒͷ ಉ͡ೣʁ

    View Slide

  5. ࣌ؒ
    ͦ΋ͦ΋

    ҧ͏ೣʁ

    View Slide

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

    View Slide

  7. 4XJGU6*Λཧղ͢ΔͨΊͷେϙΠϯτ
    w *EFOUJUZ
    w -JGFUJNF
    w %FQFOEFODZ
    4XJGU6*͕͋ͳͨͷࢥ͏௨Γͷಈ࡞Λ͍ͯ͠ͳ͔ͬͨΒɺ

    େ఍͸͜ΕΒͷѻ͍͕ؒҧ͍ͬͯΔ͔Βɻ

    View Slide

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

    View Slide

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


    Text("\(cat.age)ࡀ")


    }
    Explicit Identity

    View Slide

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


    Text("\(cat.age)ࡀ")


    }
    Explicit Identity

    View Slide

  11. 4USVDUVSBM*EFOUJUZ
    w ߏ଄ʹΑͬͯࣗಈతʹ෇
    ͚ΒΕΔ*%
    w JGจ΍TXJUDIจͷ෼ذ
    ͕͋ͬͨΒҧ͏*%͕෇
    ͚ΒΕΔ
    Structural Identity
    if flag {


    Text("A")


    } else {


    Text("B")


    }

    View Slide

  12. 4USVDUVSBM*EFOUJUZͱͷ෇͖߹͍ํ
    w ಉ͡ϏϡʔͳΒɺ෼ذΛ
    ͯ͠͸ߦ͚ͳ͍
    w ෼ذΛͤͣʹ͏·͘
    *OFSU.PEJ
    fi
    FSͳͲΛ
    ׆༻
    Structural Identity
    if flag {


    Text("A")


    } else {


    Text("B")


    }
    ద༻ͯ͠΋ϏϡʔͷඳըʹӨڹ͠ͳ͍.PEJ
    fi
    FSɻ
    PQBDJUZ

    QBEEJOH

    FUD

    View Slide

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

    View Slide

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

    View Slide

  15. -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


    ফ͞ΕΔ

    View Slide

  16. -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

    View Slide

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

    View Slide

  18. %FQFOEFODZ
    7JFX
    7JFX
    7JFX
    7JFX
    %FQFOEFODZ
    %FQFOEFODZ
    %FQFOEFODZ

    View Slide

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

    View Slide

  20. ࢀߟ
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

    View Slide