2014-10-14 2 views
6

Возможно ли использовать код ключа (KVC) с встроенными структурами данных Swift, такими как Array и Dictionary? кодирование Key-Value по-прежнему доступен для NSFoundation структур в Swift, так же, как и в Objective C.Ключевое значение кодирования (KVC) с массивом/словарь в Swift

Например, это справедливо:

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

Но это недействительно:

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

вы имеете в виду 'swiftarray' на последняя строка кода? –

+0

Да, спасибо. Просто изменил его. – kev

+0

Отметьте это сообщение Мэттом Лонгом: http://www.cimgf.com/2014/11/05/swift-and-valueforkeypath-you-cant-keep-a-good-api-down/ –

ответ

11

Это кажется, что KVC на собственных объектах Swift просто не поддерживается. Вот самый изящный обходной путь я нашел:

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

Я нашел это:

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

вы можете сделать следующее:

let items : Array<String> = (myArray as AnyObject).valueForKeyPath("name") as! Array<String> 
Смежные вопросы