2017-01-31 2 views
0

Ich versuche, eine berechnete Eigenschaft als Array-Objekt zu verwenden, etwa so:Gibt es eine Möglichkeit zum Implementieren von Substring-Gettern und Setter für eine berechnete Eigenschaft?

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

    set(newValue) { 
     ... 
    } 
} 

jedoch jetzt innerhalb der berechneten Feldwerte zu setzen, und ich habe keine Ahnung, ich versuche, wie das sein sollte implementiert. Mein Setter setzt voraus, dass ihm ein ganzes Array zum Speichern gegeben wird, aber was ist, wenn es so eingestellt wird?

arrayComputed[4] = "Some string" 

Wie würde sich das überhaupt verhalten?

+1

Verwandte: [How einzelnen Array-Element Änderungen (Update) mit Swift und KVO beobachten?] (Http://stackoverflow.com/questions/37507760/how-to-observe-individual-array -element-changes-update-with-swift-and-kvo) – dfri

+0

@dfri was er wahrscheinlich sucht, ist willSet und didset. 'var computedArray: [String] = [] { wird gesetzt {print (newValue)} didset {print (oldValue)}' Wenn er verwalten muss, wie das Array gefüllt wird, kann er es innerhalb von didSet tun. –

Antwort

0

Ich habe etwas gegraben und die Lösung gefunden. Die Einstellung mit einem Index für eine berechnete Array-Eigenschaft stellt eine newValue bereit, die das ursprüngliche Array enthält, jedoch mit dem entsprechenden Index, der entsprechend dem verwendeten Index geändert wurde. Zur Veranschaulichung:

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"] 
Verwandte Themen