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

SwiftUIのObservationツールの挙動をテストしてみた

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for KenShih KenShih
March 13, 2025

 SwiftUIのObservationツールの挙動をテストしてみた

Avatar for KenShih

KenShih

March 13, 2025
Tweet

Other Decks in Programming

Transcript

  1. Today's Agenda • ಺༰ɿ • ҰॹʹαϯϓϧίʔυΛݟͯΈΔ • ObservationπʔϧͷڍಈΛਂ۷Γ͢Δ • ໨ඪɿ

    • ͜ΕΒͷπʔϧ͕Ͳ͏ಈ͘ͷ͔ཧղ͢Δ • Ͳ͏΍ͬͯϏϡʔͷ࠶ܭࢉΛҾ͖ى͜͢ͷֶ͔Ϳ
  2. @State͔Β࣍ͷεςοϓ΁ • γϯϓϧͳঢ়ଶ؅ཧʹ࢖͍΍͍͢ • ஋ܕ΍γϯϓϧͳϏϡʔʹ࠷ద • ࠓͷͱ͜ΖɺϏϡʔ಺ͷγϯϓϧͳঢ়ଶ؅ཧʹ޲͍͍ͯ·͢ • ෳࡶͳΞϓϦέʔγϣϯͰ͸… •

    ΞϓϦ͕ෳࡶԽ͢Δͱɺಈ͖ΛϏϡʔ͔Β෼͚Δඞཁ͕͋Γ·͢ • େ͖ͳϓϩδΣΫτͰ͸ɺ࠶ར༻ੑ΍ςετͷ͠΍͢͞ɺϝϯςφϯεੑ͕ॏཁ
  3. ओཁͳٕज़ᶄ @ObservedObject for ࢀরܕ • ໨తɿϏδωεϩδοΫΛ࣋ͭΫϥεͷσʔ λมԽΛ؂ࢹ͠ɺϏϡʔΛߋ৽͢Δ • खॱ: 1.

    ϞσϧΫϥεΛObservableObjectϓϩτ ίϧʹ४ڌͤ͞Δ 2. ؂ࢹର৅Λ@Publishedʹ͢Δ 3. ϏϡʔͰ@ObservedObjectΛ࢖༻͢Δ 1⃣ 2⃣ 3⃣
  4. @ObservedObjectͷಈ࡞ͷݕূ݁Ռͱݒ೦఺ • ݒ೦఺ • ࢖͍ํΛؒҧ͑͠΍͍͢Ͱ͢ • @PublishedΛ෇͚Δ͔ͷ൑அɹ • ͲͷϓϩύςΟʹ@PublishedΛ෇͚Δ͔ΛܾΊΔͷ͸೉͍͠Ͱ͢ɻ •

    ඞཁҎ্ʹϏϡʔ͕ߋ৽͞Εͯ͠·͏Մೳੑ͕͋Γ·͢ɻ • ϓϩύςΟʹ@Published͕෇͚Δͱɺ࢖༻͠ͳͯ͘΋ߋ৽͞Ε·͢ɻ • @Stateͷಈ࡞ͱٯͰ͢
  5. @Observable macroͷݕূ݁Ռ • Ϟσϧͷมߋ؅ཧ͕؆୯ʹ • Ϟσϧͷมߋ͕ϏϡʔʹͲ͏Өڹ͢Δ͔ΛࣗಈͰ؅ཧͰ͖ΔͷͰɺίʔυ͕γϯ ϓϧʹͳΓ·͢ɻ • γϯϓϧͳ࣮૷ •

    ϞσϧΛ@ObservableͰϚʔΫ͢Δ͚ͩ • @Published΍@ObservedObject͸ෆཁ • ωετ͞ΕͨϞσϧͰ΋εϜʔζʹಈ࡞͠·͢ɻ
  6. StructΛClassʹม׵͢΂͖͔ • @ObservableͷӨڹɿ • ڧྗ͕ͩɺΞϓϦશମͰࢀরܕΛ޿͛Δ͜ͱʹͳΔ • ࢀরܕ΁ͷγϑτ • ͜Ε·Ͱɺ७ਮͳϞσϧ૚ʹ͸஋ܕ͕࢖ΘΕ͖ͯͨ •

    ͔͠͠ɺAppleͷ࠷৽ͷαϯϓϧͰ͸ɺυϝΠϯλΠϓʹStructΛ࢖Θͳ͍ํ޲ʹਐΜͰ͍Δ • જࡏతͳσϝϦοτɿ • Struct͔ΒClassʹม͑Δͱɺ ෭࡞༻ͷ௥੻ͱσόοά͕೉͘͠ͳΔ • ϓϩτίϧʹࣗಈͰରԠ͢Δػೳ͕࢖͑ͳ͘ͳΔ
  7. Structͱ@Observableͷকདྷల๬ • কདྷతʹ͸ • Struct͕@ObservableΛαϙʔτ͢ΔՄೳੑ͕͋Γ·͢ɻ • ͜ΕʹΑΓɺ஋ܕͷར఺Λ׆͔ͭͭ͠ɺ@ObservableͷػೳΛར༻Ͱ͖Δ͔΋͠Ε·ͤΜɻ • ݱঢ়ͷ՝୊: •

    Struct͸ίϐʔ͕ൃੜ͠ɺΫϥεͷΑ͏ʹ҆ఆͨࣝ͠ผࢠΛ࣋ͨͳ͍ͨΊɺมߋͷ௥੻͕೉͍͠Ͱ ͢ɻ • ΫϥεͷΑ͏ͳ؍࡯ํ๏͕࢖͑ͳ͍ͨΊɺݴޠͷ࢓૊ΈΛݟ௚͢ඞཁ͕͋Γ·͢ɻ • Apple SwiftίϛϡχςΟͰ͜ͷٞ࿦͕ਐߦதͰ͢ɻSE-0395: Observability
  8. Recap • @Stateͱ@ObservedObject • @State: ஋ܕɺγϯϓϧͳঢ়ଶ؅ཧʹ࠷దɺ • @ObservedObject: ࢀরܕɺϏδωεϞσϧʹ࢖༻ɻͨͩ࢖༻͕೉͘͠ɺؒҧ͍΍͍͢ɻ •

    @ObservableϚΫϩ: • ৽ػೳ: iOS 17ͰಋೖɺσʔλมԽΛޮ཰తʹ؂ࢹɻ • ڧྗ͕ͩΫϥε΁ͷҠߦ: @Observableར༻ͷͨΊʹݕ౼͕ඞཁɻ • ࢀরܕͷར఺Λ׆͔ͤΔ͕ɺ෭࡞༻ͷ௥੻͕೉͍͠ɻ • কདྷͷల๬ • ߏ଄ମ͕@ObservableΛαϙʔτ͢ΔՄೳੑɻ