Slide 1

Slide 1 text

Property Wrappers 1

Slide 2

Slide 2 text

What are they? 2

Slide 3

Slide 3 text

→ New in 5.1 → Java-like annotations → Can accept (generic) parameters → Used in SwiftUI 3

Slide 4

Slide 4 text

Purpose 4

Slide 5

Slide 5 text

Examples 5

Slide 6

Slide 6 text

SwiftUI 6

Slide 7

Slide 7 text

struct ContentView: View { @State private var value = 0.0 var body: some View { VStack { Text("Value is \(value)") Slider(value: $value) } } } 7

Slide 8

Slide 8 text

UIKit/ Foundation 8

Slide 9

Slide 9 text

class ViewController: UIViewController { @Keychain(key: "secret_info") var secretInfo = "" } 9

Slide 10

Slide 10 text

Let's make one! 10

Slide 11

Slide 11 text

@propertyWrapper struct TwelveOrLess { private var number = 0 var wrappedValue: Int { get { return number } set { number = min(newValue, 12) } } } // Use struct S { @TwelveOrLess var num = 13 // 12 } 11

Slide 12

Slide 12 text

@propertyWrapper struct Clamped { private var number = 0 private let maxNum: Int private let minNum: Int var wrappedValue: Int { get { return number } set { number = max(min(newValue, maxNum), minNum) } } } // Use struct S { @Clamped(maxNum: 10, minNum: 0) var num = 13 // 10 } 12

Slide 13

Slide 13 text

Projected values 13

Slide 14

Slide 14 text

@propertyWrapper struct State { //... var projectedValue: Binding } 14

Slide 15

Slide 15 text

struct ContentView: View { @State private var isDisabled = false var body: some View { OtherView($isDisabled) // Binding } } 15

Slide 16

Slide 16 text

Conclusion 16

Slide 17

Slide 17 text

More info 17

Slide 18

Slide 18 text

→ The Swift Programming Language → Burritos 18