[Swift]プロフェッショナルモニター



こんにちは!Kio👻 willSetdidSetを見たことがありますか?
これは프로퍼티 감시자(Property Observer)
関連があったら今日整理します
Let's get started 🥰

パフォーマンスモニター


コンセプト


Propertyモニタは、Property(プロパティ)値の変化を観察し、応答します.新しい値がPropertyの現在の値と同じでも、Propertyの値を設定するたびにPropertyモニタが呼び出されます.
今はどういう意味か分からないのが当たり前...😱

宣言可能な場所(Where)


使用可能な場所は次のとおりです.
  • ユーザ定義記憶属性
  • が継承する記憶属性
  • が継承する計算属性
  • 宣言


    Propertyモニタは次のように宣言します.
    struct Madonalds {
        var orderedBurgers: Int {
            willSet {
                // some code
            }
            didSet {
                // some code
            }
        }
    }

    選択(Options)

    willSet
  • を保存する前に呼び出されます.
  • didSet新しい値
  • が保存された後に呼び出されます.
  • 例(Discussion)


    プロパティ?監視者.
    プロの監視者?話し始めから難しい.😶‍🌫️
    次の例では、感覚をより簡単に見つけることができます.👻
    class McDonalds {
        var orderedBurgers: Int = 0 
    }
    
    var hamburgerCounter = McDonalds()
    hamburgerCounter.orderedBurgers = 10
    
    print(hamburgerCounter.orderedBurgers) // 10
    McDonaldsの内部Class저장 속성と発表されましたorderedBurgersに設定すると、上記の値を変更できます.
    その後、varを使用してコンソールの値を表示できます.
    では、저장 속성を使うとどんな違いがありますか?printおよび프로퍼티 감시자をチェック!

    注文したハンバーガーの数をチェック

    class McDonalds {
        var orderedBurgers: Int = 0 {
            willSet(newValue) {
                print("배고파서 주문한 햄버거는 \(newValue)개")
            }
            didSet(oldValue) {
                print("이전 주문한 햄버거는 \(oldValue)개")
            }
        }
    }
    
    var hamburgerCounter = McDonalds()
    hamburgerCounter.orderedBurgers = 10
    // 배고파서 주문한 햄버거는 10개 - newValue
    // 이전 주문한 햄버거는 0개 - oldValue
    
    hamburgerCounter.orderedBurgers = 20
    // 배고파서 주문한 햄버거는 20개 - newValue
    // 이전 주문한 햄버거는 10개 - oldValue
    違いが見えますか?!새로 주문한 햄버거의 숫자(newValue)이전 주문한 햄버거의 숫자(oldValue)を使用しますが、willSetはありませんdidSetprintを知ることができます!
    🚨
    これは、변경 이후 값(newValue)がproperty(属性)値の変化を観察し、応答できるためである.Postingの一番上の변경 이전 값(oldValue)をもう一度見てみると、今はどういう意味か理解できます!

    パラメータ(Parameters)


    newValue - oldValue

    class McDonalds {
        var orderedBurgers: Int = 0 {
            willSet(newValue) {
                print("배고파서 주문한 햄버거는 \(newValue)개")
            }
            didSet(oldValue) {
                print("이전 주문한 햄버거는 \(oldValue)개")
            }
        }
    }
    프로퍼티 감시자のうち개념 (concept)willSetのうちnewValue上の宣言を見ましたか?!
    宣言されたパラメータ名は、内部で使用できます.

    newValue- oldValue

    class McDonalds {
        var orderedBurgers: Int = 0 {
            willSet {
                print("배고파서 주문한 햄버거는 \(newValue)개")
            }
            didSet {
                print("이전 주문한 햄버거는 \(oldValue)개")
            }
        }
    }
    え...?👀
    これはdidSetoldValueの隣で何も発表されていません.
    内部で使用されているのはwillSetdidSetです.🤔
    アップルはこれをデフォルトパラメータに指定します.
    宣言なしで使用:)

    newBurgersNumber - oldBurgersNumber

    class McDonalds {
        var orderedBurgers: Int = 0 {
            willSet(newBurgersNumber) {
                print("배고파서 주문한 햄버거는 \(newBurgersNumber)개")
            }
            didSet(oldBurgersNumber) {
                print("이전 주문한 햄버거는 \(oldBurgersNumber)개")
            }
        }
    }
    必要な名前を使用してパラメータを宣言することもできます.
    それが可能だと知ったら、プロの監視者は終わります!
    プロの監視員は終わりだ
    しかし、いつ終わっても私です.😱

    リファレンス


    Properties - The Swift Programming Language
    間違った情報があれば、いつでもメッセージを残してください.👻