![](/img/trans.png)
[英]How do you use perform(#selector(setter:)) to set the value of a property using swift 4?
[英]How do you use a setter?
我試圖掌握 Swift 中的 getter 和 setter。 這是我寫的一些代碼。
class SomeClass {
var var1: Int
var var2: Int{
get{
return 7 * var1
}
set(newValue){
newValue * var1
}
}
init(_ var1: Int){
self.var1 = var1
}
}
var obj = SomeClass(3)
var objComputedProp = obj.var2
print(objComputedProp) //this prints 21
objComputedProp = 14 //I want to change var2's value to 14 (give it a newValue),
//so that var2(which is objComputedProp) returns 14*var1 (which would be 42)
print(objComputedProp)//this prints 14
我知道當我們編寫var obj = SomeClass(3)
時, class 中的var1
變為3
並且 getter 返回7 * var1
。 但是我如何訪問設置器? 將objComputedProp
設置為14
只是將其分配為 14。
我也嘗試更改var1
,但這只會打印兩次相同的數字:
var obj = SomeClass(3)
var objComputedProp = obj.var2
print(objComputedProp)
obj = SomeClass(5)
print(objComputedProp)
由於值語義,將obj.var2
分配給objComputedProp
會生成該值的副本。
線
objComputedProp = 14
不調用var2
的設置器。
除此之外,在 setter 中設置計算變量本身是沒有意義的,因為它會導致無限循環。
例如,setter 應該修改 getter 中使用的關聯變量
set(newValue){
var1 = var1 * newValue
}
計算變量的另一個例子是 Core Data。 計算屬性將不支持的類型映射到支持的類型,將String
數組映射到逗號分隔的單個String
,反之亦然
@NSManaged var string : String
var list : [String] {
get { return string.components(separatedBy: ",") }
set { string = newValue.joined(separator: ",") }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.