$30 off During Our Annual Pro Sale. View Details »

@StateObject @UIApplidationDelegateAdapter - SwiftUI 2nd major release.

@StateObject @UIApplidationDelegateAdapter - SwiftUI 2nd major release.

SwiftUI 2の追加された重要定義について
SwiftUI でアプリ構築ができることになった影響について
@StateObject
@ApplicationDelegate

notoroid

July 28, 2020
Tweet

More Decks by notoroid

Other Decks in Programming

Transcript

  1. !4UBUF0CKFDU
    !6*"QQMJDBUJPO%FMFHBUF"EBQUFS
    4XJGU6*OENBKPSSFMFBTF

    View Slide

  2. ࣗݾ঺հ

    View Slide

  3. ೳొཁ !OPUPSPJE

    w J04ΞϓϦ։ൃऀ
    w ԰߸͍Γ·͢ిࢉاը
    w !OPUPSPJE
    w !JSJNBTV
    w ࠷ۙͷಈ޲
    w ϒϩά࡮৽͠·ͨ͠

    View Slide

  4. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    w όοςϦʔϞχλʔ ϢʔςΟϦςΟʔ

    w ࠷େ୆ ࣮ػϦϞʔτ୆

    w ख࣋ͪͷJ1IPOF͔Βଞʹ͍࣋ͬͯΔ
    J1IPOF J1BEͳͲͷػثͷόοςϦʔঢ়ଶ֬
    ೝՄೳ
    w ࣗ୐ʹ͋ΔJ1IPOFͷόοςϦʔঢ়ଶ֬ೝՄ

    View Slide

  5. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    w "QQMF8BUDIରԠ
    w $PNQMJDBUJPOTରԠ
    w ॆి׬ྃ௨஌
    w ॆి׬ྃΛ఻͑ͯ͘ΕΔ௨஌Λ௥Ճ
    w ҎԼʹࢦఆ͢Δ͜ͱͰόοςϦʔ
    ΛέΞ͢Δ͜ͱ͕Մೳ
    w Կ͔ͱߴ͍J1IPOFΛ௕࣋ͪͤ͞Δͷʹ༗

    View Slide

  6. ࿩͢͜ͱ
    w 4XJGU6*ͷ௥Ճ͞Εͨॏཁఆٛʹ͍ͭͯ
    w 4XJGU6*ͰΞϓϦߏங͕Ͱ͖Δ͜ͱʹͳͬͨӨڹʹ͍ͭͯ
    w !4UBUF0CKFDU
    w !"QQMJDBUJPO%FMFHBUF

    View Slide

  7. ࿩͞ͳ͍͜ͱ
    w 4XJGU6*ͷ௥Ճ͞Εͨ6*
    w 4XJGU6*ͷσόοά
    w 4XJGU6*ͷυΩϡϝϯταϙʔτ

    View Slide

  8. ୊໨
    w 4XJGU6*͔ΒΈͨ4XJGU6*
    w 4XJGU6*ͰΞϓϦߏங
    w !4UBUF0CKFDU
    w !6*"QQMJDBUJPO%FMFHBUF"EBQUFS
    w ·ͱΊ

    View Slide

  9. 4XJGU6*͔ΒΈͨ4XJGU6*

    View Slide

  10. 4XJGU6*͔ΒΈͨ4XJGU6*
    w 4XJGU6*͔ΒͰ͖Δ͜ͱ͕രൃతʹ૿͑ͨ
    w υΩϡϝϯτϕʔεΞϓϦ΁ͷ஫ྗ͸4XJGU6*͔Βܧଓͯ͠ڧԽ
    w ίΞػೳ͸ϢʔςΟϦςΟతͳमਖ਼ʹͱͲ·Δ !4UBUF0CKFDUΛআ͍ͯ

    View Slide

  11. 4XJGU6*ͷ؆ܿͳهड़͸
    !͔Β࢝·ΔఆٛʹΑΔ΋ͷ

    View Slide

  12. !ఆٛΛྻڍͯ͠ΈΔ

    View Slide

  13. 4XJGU6*ͷ!ఆٛ
    w !6*"QQMJDBUJPO%FMFHRBUF"EBQUFS
    w !4DBMFE.FUSJD
    w !&OWJSPONFOU
    w !4DFOF4UPSBHF
    w !4DFOF#VJMEFS
    w !4UBUF
    w !#JOEJOH
    w !0CTFSWFE0CKFDU
    w !1VCMJTI
    w !&OWJSPONFOU
    w !4UBUF0CKFDU

    View Slide

  14. w !4UBUF
    w !#JOEJOH
    w !0CTFSWFE0CKFDU
    w !1VCMJTI
    w !&OWJSPONFOU
    w !4UBUF0CKFDU
    4XJGU6*ͷ!ఆٛ
    w !6*"QQMJDBUJPO%FMFHRBUF"EBQUFS
    w !4DBMFE.FUSJD
    w !&OWJSPONFOU
    w !4DFOF4UPSBHF
    w !4DFOF#VJMEFS
    7JFX
    7JFX಺Ͱঢ়ଶΛอ࣋
    7JFX಺Ͱঢ়ଶΛଋറ NVUBCMF

    7JFX಺Ͱ0CTFSWBCMF0CKFDUอ࣋
    0CTFSWBCMF0CKFDU಺ͰࢦఆՄೳͳঢ়ଶڙڅݩ 1VCMJTIFS

    ؀ڥม਺

    View Slide

  15. 4XJGU6*ͷ!ఆٛ
    w !4UBUF
    w !#JOEJOH
    w !0CTFSWFE0CKFDU
    w !1VCMJTI
    w !&OWJSPONFOU
    w !4UBUF0CKFDU
    w !6*"QQMJDBUJPO%FMFHBUF"EBQUFS
    w !NBJO
    w !/BNFTQBDF
    w !4DBMFE.FUSJD
    w !4DFOF4UPSBHF
    w !4DFOF#VJMEFS

    View Slide

  16. w !4UBUF
    w !#JOEJOH
    w !0CTFSWFE0CKFDU
    w !1VCMJTI
    w !&OWJSPONFOU
    w !4UBUF0CKFDU
    w !6*"QQMJDBUJPO%FMFHBUF"EBQUFS
    w !NBJO
    w !/BNFTQBDF
    w !4DBMFE.FUSJD
    w !4DFOF4UPSBHF
    w !4DFOF#VJMEFS
    4XJGU6*ͷ!ఆٛ
    ࠓճͷओ໾
    "QQMJDBUJPO%FMFHBUFͷ୅໾
    NBJO
    ؔ਺ͷ୅໾
    ؀ڥఆٛΛม਺Ͱอ࣋Մೳ
    Ξχϝʔγϣϯ༻໊લۭؒ
    γʔϯ؀ڥม਺
    ෳ਺ը໘࣋ͪγʔϯ༻

    View Slide

  17. w !4UBUF
    w !#JOEJOH
    w !0CTFSWFE0CKFDU
    w !1VCMJTI
    w !&OWJSPONFOU
    w !4UBUF0CKFDU
    w !6*"QQMJDBUJPO%FMFHBUF"EBQUFS
    w !NBJO
    w !/BNFTQBDF
    w !4DBMFE.FUSJD
    w !4DFOF4UPSBHF
    w !4DFOF#VJMEFS
    4XJGU6*ͷ!ఆٛ
    ࠓճͷओ໾
    "QQMJDBUJPO%FMFHBUFͷ୅໾
    NBJO
    ؔ਺ͷ୅໾
    ؀ڥఆٛΛม਺Ͱอ࣋Մೳ
    Ξχϝʔγϣϯ༻໊લۭؒ
    γʔϯ؀ڥม਺
    ෳ਺ը໘࣋ͪγʔϯ༻

    View Slide

  18. 4XJGU6*Ͱ!͕͍ͭͨΒ$PNCJOF
    'SBNFXPSL͕հࡏ͠෇ՃతͳػೳΛ
    ༩͍͑ͯΔͱࢥ͏΂͠

    View Slide

  19. !͕͍ͭͯ΋໊শ͕௚ײత͡Όͳ͍
    ͱ͍͏͋ͳͨ

    View Slide

  20. 4XJGU6*͸શһελʔτϥΠϯ
    Έ͍ͨͳ΋ͷͳͷͰ
    ࠓ͕֮͑Ͳ͖Ͱ͢Αɻ

    View Slide

  21. JSJNBTVDPNTXJGUVJDPNCJOF
    GSBNFXPSLLFZQBUITXJGUVJ
    4XJGU6*ΛֶͿ্Ͱ಄ʹೖΕ͓͖͍ͯͨ,FZ1BUIɺ$PNCJOFGSBNFXPSL
    ʹ͍ͭͯ͸೥݄ษڧձͰ࿩ͨ͠಺༰Λ֬ೝ

    View Slide

  22. 4XJGU6*ͰΞϓϦߏங

    View Slide

  23. 4XJGU6*ϕʔεͰΞϓϦߏங
    ͕ՄೳͱͳΓ·ͨ͠

    View Slide

  24. 4XJGU6*͕ΞϓϦߏங·Ͱԡ͠ਐΊͨཧ༝
    w ϚϧνϓϥοτϑΥʔϜԽ J04 J1BE04 NBD04 UW04 XBUDI04

    w ৽ͨͳ։ൃऀͷݺͼࠐΈ
    w ೥ϓϨΠϠʔ͕ΞϓϦ։ൃʹࢭ·ΔΘ͚΋ͳ͠ɺ૯ྔ΋૿͑ͳ͍
    w 8FCϓϩάϥϚʹ਌࿨ੑΛΑΓߴͯ͘͠৽نࢀೖऀݺͼࠐΈ

    View Slide

  25. 4XJGU6*ͰΞϓϦߏங͸
    ͲͷΑ͏ʹୡ੒͞Εͨ

    View Slide

  26. 4XJGU6*ͷߟ͑ํΛ
    ΞϓϦશମʹద༻

    View Slide

  27. View Slide

  28. $PDPBGSBNFXPSL
    JNQPSU6*,JU
    !6*"QQMJDBUJPO.BJO
    DMBTT"QQ%FMFHBUF6*3FTQPOEFS 6*"QQMJDBUJPO%FMFHBUF\
    WBSNPEFM.PEFM

    GVODBQQMJDBUJPO @BQQMJDBUJPO EJE'JOJTI-BVODIJOH8JUI0QUJPOTMBVODI0QUJPOT
    #PPM\
    SFUVSOUSVF
    ^
    GVODBQQMJDBUJPO www
    \

    ^

    GVODBQQMJDBUJPO www
    \
    ^
    ^
    DMBTT4DFOF%FMFHBUF6*3FTQPOEFS 6*8JOEPX4DFOF%FMFHBUF\

    View Slide

  29. 4XJGU6*
    JNQPSU4XJGU6*
    !NBJO
    TUSVDU46*5FTU"QQ"QQ\
    WBSCPEZTPNF4DFOF\
    8JOEPX(SPVQ\
    $POUFOU7JFX

    ^
    ^
    ^

    View Slide

  30. ྑ͍͜ͱʹΑ͏ʹࢥ͑Δ͕ʜ

    View Slide

  31. $PDPBGSBNFXPSL
    JNQPSU6*,JU
    !6*"QQMJDBUJPO.BJO
    DMBTT"QQ%FMFHBUF6*3FTQPOEFS 6*"QQMJDBUJPO%FMFHBUF\
    WBSNPEFM.PEFM

    GVODBQQMJDBUJPO @BQQMJDBUJPO EJE'JOJTI-BVODIJOH8JUI0QUJPOTMBVODI0QUJPOT
    #PPM\
    SFUVSOUSVF
    ^
    GVODBQQMJDBUJPO www
    \

    ^

    GVODBQQMJDBUJPO www
    \
    ^
    ^
    DMBTT4DFOF%FMFHBUF6*3FTQPOEFS 6*8JOEPX4DFOF%FMFHBUF\
    ΤϯτϦʔ ΦϒδΣΫτ

    ΦϒδΣΫτ
    Πϕϯτ
    Πϕϯτ
    Πϕϯτ

    View Slide

  32. 4XJGU6*
    JNQPSU4XJGU6*
    !NBJO
    TUSVDU46*5FTU"QQ"QQ\
    WBSCPEZTPNF4DFOF\
    8JOEPX(SPVQ\
    $POUFOU7JFX

    ^
    ^
    ^
    ߏ଄ମ ΤϯτϦʔ

    ߏ଄ମ
    ߏ଄ମ

    View Slide

  33. View Slide

  34. View Slide

  35. ΞϓϦߏஙͷ໰୊఺
    w $PDPBGSBNFXPSLͷ৔߹͸ɺΦϒδΣΫτͷߟ͑ํͷൣᙝͰΞϓϦߏங
    ͕Մೳ
    w 4JXGU6*Ͱ͸ɺΞϓϦߏங·Ͱ4XJGU6*ͷߟ͑ʹଇΔͷͰΦϒδΣΫτ
    Λ҆௚ʹ௥ՃͰ͖ͳ͍
    w ΞϓϦͷΠϕϯτ͸ɺϓϥοτϑΥʔϜ͝ͱґଘ͍ͯ͠ΔͷͰɺϚϧνϓ
    ϥοτϑΥʔϜΛࢤ͢4XJGU6*ͱ૬༰Εͳ͍

    View Slide

  36. !4UBUF0CKFDU
    !6*"QQMJDBUJPO%FMFHBUF"EBQUFS

    View Slide

  37. !4UBUF0CKFDU
    w 4XJGU6*͕࠷ऴతʹϨϯμϦϯά͢ΔΦϒδΣΫτͱಉ͡ϥΠϑαΠΫϧ
    w 0CTFSWBCMF0CKFDUͷ೿ੜΫϥεͷΈΛࢦఆՄ
    w 4XJGU6*ͷߟ͑ํ͔Β͸গ͠֎ΕΔ͕ࣗવʹίʔυ͕ॻ͚Δ

    View Slide

  38. import SwiftUI
    @main
    struct FooApp: App {
    @StateObject var model = FooModel()
    var body: some Scene {
    WindowGroup {
    ContentView()
    .environmentObject(model)
    }
    }
    }

    View Slide

  39. !6*"QQMJDBUJPO%FMFHBUF"EBQUFS
    w ೥ͷஈ֊Ͱ΋ϓϥοτϑΥʔϜ͝ͱͷΞϓϦέʔγϣϯϑϨʔϜϫʔΫʹ
    ґଘ͢ΔՕॴ͸ଘࡏ
    w J044%,Ͱ͸6*"QQMJDBUJPO%FMFHBUFʹॏཁͳॲཧ͕಺ࡏ
    w ϓογϡ௨஌ͷొ࿥੒ޭࣦഊ
    w όοΫάϥ΢ϯυ௨஌ͷड͚औΓ
    w )BOEP⒎ͷৼΓ෼͚
    w 4XJGU6*͕ΞϓϦߏஙΛ୲͍ͬͯΔ౎߹্6*"QQMJDBUJPO%FMFHBUFͷखஈΛఏڙ

    View Slide

  40. import UIKit
    class AppDelegate: UIResponder, UIApplicationDelegate {
    }
    import SwiftUI
    @main
    struct FooApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate
    var body: some Scene {
    WindowGroup {
    ContentView()
    }
    }
    }

    View Slide

  41. αϯϓϧίʔυ
    !4UBUF0CKFDUͷڍಈΛ֬ೝͯ͠ΈΑ͏

    View Slide

  42. HJUIVCDPNOPUPSPJE
    4UBUF0CKFDU$BUBMPH

    View Slide

  43. ౴͑߹Θͤ

    View Slide

  44. View Slide

  45. !4UBUF0CKFDUࡶײ
    w ϨϯμϦϯά͞ΕͨΦϒδΣΫτͱಉ͡ϥΠϑαΠΫϧ
    w ࠩ͠ସ͕͑ൃੜ͠ͳ্͍ҐΦϒδΣΫτ "QQ 4DFOF
    Ͱѻ͍΍͍͢
    w υΩϡϝϯτϕʔεΞϓϦͷͨΊʹ࡞ΒΕͨΑ͏ʹ΋Έ͑Δ

    View Slide

  46. ·ͱΊ
    w 4XJGU6*͸6*͕औΓ্͕͛ͪͰ͕͢ίΞఆٛ΋૿͍͑ͯ·͢
    w 4XJGU6*ͰΞϓϦߏங͢ΔͱݹࢀͷΞϓϦ։ൃऀ΄ͲมԽΛڧ͍ΒΕ
    ·͢
    w !4UBUF0CKFDU͸4JXGU6*ΞϓϦ։ൃͷ৭ʑͳ໰୊Λղܾ͠·͢

    View Slide