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

Swift愛好会 の 思い出

Swift愛好会 の 思い出

2024 年 5 月 18 日【第一部完!パーティー】集まれSwift好き!Swift愛好会 vol.82
で発表した資料です

SwiftUIのデータ管理
集まれSwift好き!Swift愛好会 vol.56 @ オンライン発表資料
https://speakerdeck.com/satotakeshi/swiftuifalsetetaguan-li

2020 年 12 月 9 日
Xcodegenを個人アプリに導入
集まれSwift好き!Swift愛好会 vol.58 @ オンライン
https://speakerdeck.com/satotakeshi/xcodegenwoge-ren-apurinidao-ru

2021 年 3 月 17 日
Swift Concurrency 入門
集まれSwift好き!Swift愛好会 vol.65 @ オンライン
https://speakerdeck.com/satotakeshi/swift-concurrencyru-men

2022 年 2 月 22 日
What’s new in Vision
集まれSwift好き!Swift愛好会スピンオフWWDC22セッション要約会 @オンライン
https://speakerdeck.com/satotakeshi/whats-new-in-vision

2022 年 6 月 24 日
Swift 5.9からのデータ監視 Observationフレームワーク入門
【帰ってきた開発合宿!】集まれKotlin好き!Kotlin愛好会 vol.48
2023/11/26

Sato Takeshi

May 18, 2024
Tweet

More Decks by Sato Takeshi

Other Decks in Technology

Transcript

  1. Who am I • Name • 佐藤剛士(さとうたけし) • Company •

    Merpay, Inc.(2019/01 ~) • Role • Software Engineer (iOS) • Account • Twitter: @hatakenokakashi • Facebook: 佐藤剛士 • GitHub: SatoTakeshiX
  2. • SwiftUIのデータ管理 ◦ 集まれSwift好き!Swift愛好会 vol.56 @ オンライン発表資料 ◦ 2020 年

    12 月 9 日 • Xcodegenを個人アプリに導入 ◦ 集まれSwift好き!Swift愛好会 vol.58 @ オンライン ◦ 2021 年 3 月 17 日 • Swift Concurrency 入門 ◦ 集まれSwift好き!Swift愛好会 vol.65 @ オンライン ◦ 2022 年 2 月 22 日 • What’s new in Vision ◦ 集まれSwift好き!Swift愛好会スピンオフWWDC22セッション要約会 @オンライン ◦ 2022 年 6 月 24 日 • Swift 5.9からのデータ監視 Observationフレームワーク入門 ◦ 【帰ってきた開発合宿!】集まれKotlin好き!Kotlin愛好会 vol.48 ◦ 2023/11/26
  3. ObservableObjectで作ると struct ParentObjectView: View { @StateObject private var itemModel: ItemModel

    = .init() var body: some View { let _ = Self._printChanges() List(itemModel.items.indices, id: \.self) { index in ChildObjectView( isChecked: $itemModel.items[index].isChecked, name: itemModel.items[index].name ) } } } private struct ChildObjectView: View { @Binding var isChecked: Bool var name: String var body: some View { let _ = Self._printChanges() Toggle(isOn: $isChecked, label: { Text(name) }) } }
  4. Observationフレームワークで作ると struct ParentObservableView: View { @State private var itemModel: ItemModel

    = .init() var body: some View { let _ = Self._printChanges() List(itemModel.items) { item in @Bindable var item = item ChildObservableView( isChecked: $item.isChecked, name: item.name ) } } } private struct ChildObservableView: View { @Binding var isChecked: Bool var name: String var body: some View { let _ = Self._printChanges() Toggle(isOn: $isChecked, label: { Text(name) }) } }
  5. Observationフレームワークの使い方 @Observable fileprivate final class Book { var isBorrowed: Bool

    = false func switchBorrow() { isBorrowed.toggle() } } struct ObservationView: View { @State private var book = Book() var body: some View { VStack { Text(book.isBorrowed ? "貸出中" : "貸出可能") Button { book.switchBorrow() } label: { Text(book.isBorrowed ? "この本を返す" : "この本 を借りる") } } } }