$30 off During Our Annual Pro Sale. View Details »

Property Wrappers

yhkaplan
January 21, 2020

Property Wrappers

yhkaplan

January 21, 2020
Tweet

More Decks by yhkaplan

Other Decks in Programming

Transcript

  1. Property Wrappers
    1

    View Slide

  2. What are they?
    2

    View Slide

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

    View Slide

  4. Purpose
    4

    View Slide

  5. Examples
    5

    View Slide

  6. SwiftUI
    6

    View Slide

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

    View Slide

  8. UIKit/
    Foundation
    8

    View Slide

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

    View Slide

  10. Let's make one!
    10

    View Slide

  11. @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

    View Slide

  12. @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

    View Slide

  13. Projected values
    13

    View Slide

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

    View Slide

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

    View Slide

  16. Conclusion
    16

    View Slide

  17. More info
    17

    View Slide

  18. → The Swift Programming Language
    → Burritos
    18

    View Slide