Slide 1

Slide 1 text

໦ ू·Ε4XJGU޷͖ʂ4XJGUѪ޷ձεϐϯΦϑ88%$ηογϣϯཁ໿ձ!%F/" !UIF@VIPPJ 8IBUTOFXJO4XJGUͷ ཁ໿💡

Slide 2

Slide 2 text

΢ϗʔΠ J04ΞϓϦΤϯδχΞ w ͱ͖Ͳ͖4XJGUѪ޷ձͷ 
 ӡӦʹࢀՃ͍ͯ͠Δ w ೥࿈ଓճ໨ w ॳͷΦϑϥΠϯ։࠵

Slide 3

Slide 3 text

ͷ৽ػೳʹ͍ͭͯ࿩͠·͢ 4XJGU

Slide 4

Slide 4 text

4& JGࣜͱTXJUDI͕ࣜ௥Ճ͞Εͨ // Swift 5.8 let isUhooi = { switch monster { case .uhooi: return true case .chibird: return false } }() // Swift 5.8 let foo = { if bar == 0 { return "Foo" } else { return "Bar" } }()

Slide 5

Slide 5 text

4& JGࣜͱTXJUDI͕ࣜ௥Ճ͞Εͨ // Swift 5.9 let isUhooi = switch monster { case .uhooi: true case .chibird: false } // Swift 5.9 let foo = if bar == 0 { "Foo" } else { "Bar" }

Slide 6

Slide 6 text

4& "UUBDIFE.BDSPT͕௥Ճ͞Εͨ // Swift 5.9 import Observation @Observable final class MonsterViewModel { var name = "" var description = "" init(name: String, description: String) { self.name = name self.description = description } }

Slide 7

Slide 7 text

4& 'SFFTUBOEJOH%FDMBSBUJPO.BDSPT͕௥Ճ͞Εͨ // Swift 5.9 import PowerAssert let a = -1 let b = 10 let c = 17 #assert(max(a, b) == c) | | | | | 10 -1 10 | 17 false

Slide 8

Slide 8 text

4& Մม௕ͷܕΛந৅ԽͰ͖Δ // Swift 5.8 static func buildBlock( _ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7, _ c8: C8, _ c9: C9 ) -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)> where C0 : View, C1 : View, C2 : View, C3 : View, C4 : View, C5 : View, C6 : View, C7 : View, C8 : View, C9 : View { TupleView((c0, c1, c2, c3, c4, c5, c6, c7, c8, c9)) }

Slide 9

Slide 9 text

4& Մม௕ͷܕΛந৅ԽͰ͖Δ // Swift 5.9 static func buildBlock(_ content: repeat each Content) -> TupleView<(repeat each Content)> where repeat each Content : View { TupleView((repeat each content)) }

Slide 10

Slide 10 text

4& $PNCJOFʹґଘͤͣ؂ࢹͰ͖Δ // Swift 5.8 import Combine final class MonsterViewModel: ObservableObject { @Published var name: String @Published var description: String init(name: String, description: String) { self.name = name self.description = description } } struct MonsterView: View { @StateObject var viewModel: MonsterViewModel = .init(name: "Uhooi", description: "Foo") var body: some View { Text("Hello, \(viewModel.name)") } }

Slide 11

Slide 11 text

4& $PNCJOFʹґଘͤͣ؂ࢹͰ͖Δ // Swift 5.9 import Observation @Observable final class MonsterViewModel { var name = "" var description = "" init(name: String, description: String) { self.name = name self.description = description } } struct MonsterView: View { var viewModel: MonsterViewModel = .init(name: "Uhooi", description: "Foo") var body: some View { Text("Hello, \(viewModel.name)") } }

Slide 12

Slide 12 text

4& TUSVDUͱFOVNΛίϐʔෆՄೳʹ͢Δ // Swift 5.8 struct S { init() { print("S: init()") } // ❌: Deinitializers may only be declared within a class or actor deinit { print("S: deinit") } }

Slide 13

Slide 13 text

4& TUSVDUͱFOVNΛίϐʔෆՄೳʹ͢Δ // Swift 5.9 struct S: ~Copyable { init() { print("S: init()") } // ✅ deinit { print("S: deinit") } }

Slide 14

Slide 14 text

·ͱΊ w ϚΫϩ͕ศརͦ͏ w ݴޠ࢓༷͕ͲΜͲΜ೉͘͠ͳΔ w ಛఆͷϓϥοτϑΥʔϜʢ%BSXJOʣʹґଘ͠ͳ͍Α͏ʹͳ͖͍ͬͯͯΔ w 0CTFSWBUJPO w 4XJGU'PVOEBUJPO