2014-10-14 17 views
6

Czy możliwe jest zastosowanie kodu klucza (KVC) z natywnymi strukturami danych Swift, takimi jak Array i Dictionary? Klucz-wartość kodowania jest nadal dostępny dla struktur NSFoundation obrębie Swift, podobnie jak w Objective CKodowanie kluczem wartości (KVC) z tablicą/słownikiem w Swift

Na przykład, jest to ważne:

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

Ale to nieważne:

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

to znaczy 'swiftarray' u ostatnia linia kodu? –

+0

Tak, dziękuję. Po prostu to zmieniono. – kev

+0

Zobacz ten post Matt Long: http://www.cimgf.com/2014/11/05/swift-and-valueforkeypath-you-cant-keep-a-good-api-down/ –

Odpowiedz

11

To wydaje się, że KVC na rodzimych obiektach Swift nie jest po prostu obsługiwany. Oto najbardziej elegancki obejście znalazłem:

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

Znalazłem to:

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

można wykonać następujące czynności:

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