Slide 1

Slide 1 text

Ken from LINEϠϑʔגࣜձࣾ SwiftUIͷObservationπʔϧͷڍ ಈΛςετͯ͠Έͨ ϞόνΩ #7 2025/3/13

Slide 2

Slide 2 text

Today's Agenda • ಺༰ɿ • ҰॹʹαϯϓϧίʔυΛݟͯΈΔ • ObservationπʔϧͷڍಈΛਂ۷Γ͢Δ • ໨ඪɿ • ͜ΕΒͷπʔϧ͕Ͳ͏ಈ͘ͷ͔ཧղ͢Δ • Ͳ͏΍ͬͯϏϡʔͷ࠶ܭࢉΛҾ͖ى͜͢ͷֶ͔Ϳ

Slide 3

Slide 3 text

SwiftUIʹ͓͚ΔObservationͱ͸ԿͰ͔͢ʁ • Ұൠతʹɿ • σʔλͷมԽΛ௥੻͢ΔͨΊͷπʔϧ • ओͳ༻్ɿ • SwiftUIͷͨΊʹઃܭ͞Ε͓ͯΓɺσʔλͷมԽʹԠͯ͡UIΛࣗಈతʹߋ৽ ͠·͢ɻ

Slide 4

Slide 4 text

ओཁͳٕज़ᶃ @State • ໨తɿϏϡʔ಺ͰϩʔΧϧͳσʔλͷมԽ Λ௥੻͢Δ • λΠϓɿ஋ܕʢྫɿIntɺStringɺBoolɺ Structʣ • ྫ: Χ΢ϯλʔϏϡʔ

Slide 5

Slide 5 text

@StateͷมߋʹΑΓɺ Ϗϡʔͷߋ৽ͷݕূ

Slide 6

Slide 6 text

݁Ռ: @StateͷมߋʹΑΔϏϡʔͷߋ৽ͷݕূ • ෆཁͳ࠶ߋ৽ͷ๷ࢭ • @State͸ɺ͋Δఔ౓ɺෆཁͳ࠶ߋ৽Λ๷͙͜ͱ͕Ͱ͖·͢ɻ • ࢖༻͞Εͳ͍৔߹ͷಈ࡞ • @State͕࢖༻͞Εͳ͍৔߹ɺ࠶ߋ৽͸ߦΘΕ·ͤΜɻ • σʔλͷ؂ࢹ • Ұ౓σʔλΛ࢖༻͢ΔͱɺͦͷσʔλͷมߋΛͣͬͱ؂ࢹ͠·͢ɻ

Slide 7

Slide 7 text

@State͔Β࣍ͷεςοϓ΁ • γϯϓϧͳঢ়ଶ؅ཧʹ࢖͍΍͍͢ • ஋ܕ΍γϯϓϧͳϏϡʔʹ࠷ద • ࠓͷͱ͜ΖɺϏϡʔ಺ͷγϯϓϧͳঢ়ଶ؅ཧʹ޲͍͍ͯ·͢ • ෳࡶͳΞϓϦέʔγϣϯͰ͸… • ΞϓϦ͕ෳࡶԽ͢Δͱɺಈ͖ΛϏϡʔ͔Β෼͚Δඞཁ͕͋Γ·͢ • େ͖ͳϓϩδΣΫτͰ͸ɺ࠶ར༻ੑ΍ςετͷ͠΍͢͞ɺϝϯςφϯεੑ͕ॏཁ

Slide 8

Slide 8 text

ओཁͳٕज़ᶄ @ObservedObject for ࢀরܕ • ໨తɿϏδωεϩδοΫΛ࣋ͭΫϥεͷσʔ λมԽΛ؂ࢹ͠ɺϏϡʔΛߋ৽͢Δ • खॱ: 1. ϞσϧΫϥεΛObservableObjectϓϩτ ίϧʹ४ڌͤ͞Δ 2. ؂ࢹର৅Λ@Publishedʹ͢Δ 3. ϏϡʔͰ@ObservedObjectΛ࢖༻͢Δ 1⃣ 2⃣ 3⃣

Slide 9

Slide 9 text

@ObservedObjectͷมߋʹΑΓɺ
 Ϗϡʔͷߋ৽ͷݕূ

Slide 10

Slide 10 text

@ObservedObjectͷಈ࡞ͷݕূ݁Ռͱݒ೦఺ • ݒ೦఺ • ࢖͍ํΛؒҧ͑͠΍͍͢Ͱ͢ • @PublishedΛ෇͚Δ͔ͷ൑அɹ • ͲͷϓϩύςΟʹ@PublishedΛ෇͚Δ͔ΛܾΊΔͷ͸೉͍͠Ͱ͢ɻ • ඞཁҎ্ʹϏϡʔ͕ߋ৽͞Εͯ͠·͏Մೳੑ͕͋Γ·͢ɻ • ϓϩύςΟʹ@Published͕෇͚Δͱɺ࢖༻͠ͳͯ͘΋ߋ৽͞Ε·͢ɻ • @Stateͷಈ࡞ͱٯͰ͢

Slide 11

Slide 11 text


 ωετ͞Εͨ
 @ObservedObjectͷಈ࡞ͷݕূ

Slide 12

Slide 12 text

ωετ͞Εͨ@ObservedObjectͷಈ࡞ͷݕূͷ݁Ռ ՝୊ • ωετ͞ΕͨObservableΦϒδΣΫτ͸ѻ͍͕೉͍͠ • ࢠͷঢ়ଶมԽΛ؍࡯͢ΔͨΊʹ໌֬ʹ͠ͳ͍ͱ͍͚ͳ͍ͷͰɺෳࡶʹͳΔ • ׬ᘳʹ؅ཧ͢Δͷ͸೉͘͠ɺఘΊͯ͢΂ͯͷঢ়ଶมԽΛߪಡ͕ͪ͠Ͱ͢ • SwiftUIʹ͸ωετ͞ΕͨObservableΦϒδΣΫτʹର͢Δ༗ޮͳղܾࡦ͕ܽ ͚͍ͯΔ

Slide 13

Slide 13 text

ओཁͳٕज़ᶅ iOS 17Ͱಋೖ͞Εͨ৽͍͠Observationπʔϧ @Observable macro • ಛ௃: • @State΍@ObservedObjectΛ࢖Θͣʹɺ ΑΓγϯϓϧͳίʔυͰσʔλͷมԽΛ௥ ੻͢Δ

Slide 14

Slide 14 text

@Observable macroͷมߋʹΑΔ
 Ϗϡʔͷߋ৽ͷݕূ

Slide 15

Slide 15 text

@Observable macroͷݕূ݁Ռ • Ϟσϧͷมߋ؅ཧ͕؆୯ʹ • Ϟσϧͷมߋ͕ϏϡʔʹͲ͏Өڹ͢Δ͔ΛࣗಈͰ؅ཧͰ͖ΔͷͰɺίʔυ͕γϯ ϓϧʹͳΓ·͢ɻ • γϯϓϧͳ࣮૷ • ϞσϧΛ@ObservableͰϚʔΫ͢Δ͚ͩ • @Published΍@ObservedObject͸ෆཁ • ωετ͞ΕͨϞσϧͰ΋εϜʔζʹಈ࡞͠·͢ɻ

Slide 16

Slide 16 text

⚠@Observable಺Ͱ஋ܕͷ࢖༻ʹؔ͢Δ஫ҙ఺ • ObservableϞσϧͰ஋ܕΛࢀর͢Δͱɺมߋ͕ͳͯ͘΋࠶ߋ৽͕ൃੜ͢Δ • ྫ͑͹ɺ஋ܕͷArrayͷม਺Λࢀর͢Δ • ഑ྻશମΛ؂ࢹͯ͠͠·͍·͢ • Arrayͷ1ͭ໨͚ͩΛࢀর͍ͯͯ͠΋ɺଞͷΞΠςϜͷมߋͰϏϡʔ͕࠶ߋ ৽͞Ε·͢ɻ • ͜ͷڍಈ͸ɺଞͷ஋ܕʹ΋ൃੜ͠·͢(Struct΍Dictionary)

Slide 17

Slide 17 text

@Observable಺Ͱͷ஋ܕͷ࢖༻ςετ

Slide 18

Slide 18 text

StructΛClassʹม׵͢΂͖͔ • @ObservableͷӨڹɿ • ڧྗ͕ͩɺΞϓϦશମͰࢀরܕΛ޿͛Δ͜ͱʹͳΔ • ࢀরܕ΁ͷγϑτ • ͜Ε·Ͱɺ७ਮͳϞσϧ૚ʹ͸஋ܕ͕࢖ΘΕ͖ͯͨ • ͔͠͠ɺAppleͷ࠷৽ͷαϯϓϧͰ͸ɺυϝΠϯλΠϓʹStructΛ࢖Θͳ͍ํ޲ʹਐΜͰ͍Δ • જࡏతͳσϝϦοτɿ • Struct͔ΒClassʹม͑Δͱɺ ෭࡞༻ͷ௥੻ͱσόοά͕೉͘͠ͳΔ • ϓϩτίϧʹࣗಈͰରԠ͢Δػೳ͕࢖͑ͳ͘ͳΔ

Slide 19

Slide 19 text

ྫɿObservableϞσϧ಺Ͱେ͖ͳ஋ܕΛ͍࣋ͬͯΔ৔߹

Slide 20

Slide 20 text

Structͱ@Observableͷকདྷల๬ • কདྷతʹ͸ • Struct͕@ObservableΛαϙʔτ͢ΔՄೳੑ͕͋Γ·͢ɻ • ͜ΕʹΑΓɺ஋ܕͷར఺Λ׆͔ͭͭ͠ɺ@ObservableͷػೳΛར༻Ͱ͖Δ͔΋͠Ε·ͤΜɻ • ݱঢ়ͷ՝୊: • Struct͸ίϐʔ͕ൃੜ͠ɺΫϥεͷΑ͏ʹ҆ఆͨࣝ͠ผࢠΛ࣋ͨͳ͍ͨΊɺมߋͷ௥੻͕೉͍͠Ͱ ͢ɻ • ΫϥεͷΑ͏ͳ؍࡯ํ๏͕࢖͑ͳ͍ͨΊɺݴޠͷ࢓૊ΈΛݟ௚͢ඞཁ͕͋Γ·͢ɻ • Apple SwiftίϛϡχςΟͰ͜ͷٞ࿦͕ਐߦதͰ͢ɻSE-0395: Observability

Slide 21

Slide 21 text

Recap • @Stateͱ@ObservedObject • @State: ஋ܕɺγϯϓϧͳঢ়ଶ؅ཧʹ࠷దɺ • @ObservedObject: ࢀরܕɺϏδωεϞσϧʹ࢖༻ɻͨͩ࢖༻͕೉͘͠ɺؒҧ͍΍͍͢ɻ • @ObservableϚΫϩ: • ৽ػೳ: iOS 17ͰಋೖɺσʔλมԽΛޮ཰తʹ؂ࢹɻ • ڧྗ͕ͩΫϥε΁ͷҠߦ: @Observableར༻ͷͨΊʹݕ౼͕ඞཁɻ • ࢀরܕͷར఺Λ׆͔ͤΔ͕ɺ෭࡞༻ͷ௥੻͕೉͍͠ɻ • কདྷͷల๬ • ߏ଄ମ͕@ObservableΛαϙʔτ͢ΔՄೳੑɻ

Slide 22

Slide 22 text

Reference • https://developer.apple.com/documentation/swiftui/state • https://developer.apple.com/documentation/swiftui/observedobject • https://developer.apple.com/documentation/observation • https://developer.apple.com/documentation/swiftui/migrating-from-the- observable-object-protocol-to-the-observable-macro • https://forums.swift.org/t/second-review-se-0395-observability/65261 • https://github.com/apple/swift-evolution/blob/main/proposals/0395- observability.md