2014-10-14 22 views
6

È possibile codificare il codice-chiave (KVC) con strutture dati native Swift come Array e Dizionario? codifica valore-chiave è ancora disponibile per le strutture NSFoundation all'interno Swift, proprio come in Objective C.Codifica valore-chiave (KVC) con matrice/dizionario in Swift

Per esempio, questo è valido:

var nsarray: NSArray = NSArray() 
// Fill the array with objects 
var array: NSArray = nsarray.valueForKeyPath("key.path") 

Ma questo non è valido:

var swiftarray: Array = [] 
// Fill the array with objects 
var array = swiftarray.valueForKeyPath("key.path") // Invalid, produces a compile-time error 
+0

vuoi dire 'swiftarray' al ultima riga di codice? –

+0

Sì, grazie. L'ho appena cambiato. – kev

+0

Dai un'occhiata a questo post di Matt Long: http://www.cimgf.com/2014/11/05/swift-and-valueforkeypath-you-cant-keep-a-good-api-down/ –

risposta

11

E ' sembra che KVC su oggetti Swift nativi non sia supportato. Ecco la più elegante soluzione che ho trovato:

var swiftarray: Array = [] 
// Fill the array with objects 
var array: NSArray = (swiftarray as NSArray).valueForKeyPath("key.path") as NSArray 
8

ho trovato questo:

var array = swiftarray.map({$0["key.path"]! as ObjectType}) 
2

è possibile effettuare le seguenti operazioni:

let items : Array<String> = (myArray as AnyObject).valueForKeyPath("name") as! Array<String>