理解 SwiftUI 裏的屬性裝飾器 @State

import UIKit


/**
 * 模仿SwiftUI @State註解
 *
**/

@propertyWrapper
struct AState<T> {
    // class 是引用,不存在值拷貝的情況
    private var bind: B
    
    init(wrappedValue : T) {
        bind = B(wrappedValue)
    }
    
    var wrappedValue : T {
        get {
            self.bind.val
        }
        
        nonmutating set {
            self.bind.val = newValue
        }
    }
    
    class B {
        var val : T
        init(_ wrappedValue: T) {
            self.val = wrappedValue
        }
    }
}


struct CT {
    @AState var val:String
}


// 測試輸出

var ct = CT(val: "222")
var ct2 = ct

ct.val = "111"
print("ct >> \(ct.val)")
print("ct2 >> \(ct2.val)")

 

發佈了31 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章