簡體   English   中英

你如何使用二傳手?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM