Swift Property Wrapper的使用

Swift 5.0 開始支持Swift Property Wrapper, 不過之前沒有深入探究使用方法。今天我突然來了靈感,想到了其中的一個應(yīng)用場景。比如給屬性提供一個默認(rèn)參數(shù)。

定義Default類型

定義一個Default的類型,有一個類型T, 可以決定wrappedValue是什么類型。這里有一個默認(rèn)屬性defaultValue, 以及一個屬性value用來存儲屬性的值。當(dāng)調(diào)用屬性的時候,會判斷value是否為nil, 如果非nil返回value,否則返回defaultValue。當(dāng)然value也可以被設(shè)置。

@propertyWrapper
public struct Default<T> {
    
    private var defaultValue: T
    var value: T?
    public init(_ defaultValue: T) {
        self.defaultValue = defaultValue
    }
 
    public var wrappedValue: T? {
        get { return value ?? defaultValue }
        set { value = newValue }
    }

}

例子

定義一個結(jié)構(gòu)體Item, 里面有3個屬性,都使用了Default的property wrapper. 比如intValue的類型是Int?, 那么Default的wrappedValue類型也為Int, 最終決定了value和defaultValue的參數(shù)類型。運(yùn)行代碼,最終得到以下結(jié)果。

struct Item {
      @Default(2) var intValue: Int?
      @Default(3) var doubleValue: Double?
      @Default("Hello") var stringValue: String?
}
var item = Item()
print(item.intValue!) // 2
print(item.doubleValue!) // 3
print(item.stringValue!) // Hello
item.intValue = 4
item.doubleValue = 5
item.stringValue = "World"
print(item.intValue!) // 4
print(item.doubleValue!) // 5
print(item.stringValue!) // World
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容