2017-01-31 38 views
0

我試圖用一個計算的屬性作爲一個數組對象,像這樣:有沒有一種方法來實現計算屬性的子字符串getter和setter?

var arrayComputed: [String] { 
    get { 
     ... 
    } 

    set(newValue) { 
     ... 
    } 
} 

不過,現在我正在嘗試設置計算陣列內的值,我不知道這應該如何實現。我的二傳手是假設它正在被賦予一個完整的陣列來存儲,但如果它被設置爲這樣呢?

arrayComputed[4] = "Some string" 

這會如何表現?

+1

相關:[如何觀察與夫特和KVO獨立的數組元素的改變(更新)?(http://stackoverflow.com/questions/37507760/how-to-observe-individual-array -element-changes-update-with-swift-and-kvo) – dfri

+0

@dfri他可能正在尋找的是willSet和didSet。 'var computedArray:[String] = [{ willSet {print(newValue)} didSet {print(oldValue)}'如果他需要管理如何填充數組,他可以在didSet中完成。 –

回答

0

我做了一些挖掘並找到了解決方案。在計算數組屬性上使用下標設置將提供包含原始數組的newValue,但相關索引會根據所使用的下標進行更改。爲了說明:

var actualArray: [String] = [] 

var computedArray: [String] { 
    get { 
     return actualArray 
    } 

    set(setTo) { 
     actualArray = setTo 
    } 
} 

computedArray.append("Hello") 
computedArray.append("Matt") 
computedArray.append("World") 

// computedArray and actualArray are now both ["Hello", "Matt", "World"] 

computedArray[1] = "Jacob" 

// computedArray and actualArray are now both ["Hello", "Jacob", "World"] 
相關問題