问题
Is it possible to key-value code (KVC) with native Swift data structures such as Array and Dictionary? Key-Value coding is still available for NSFoundation structures within Swift, just like in Objective C.
For example, this is valid:
var nsarray: NSArray = NSArray()
// Fill the array with objects
var array: NSArray = nsarray.valueForKeyPath("key.path")
But this is invalid:
var swiftarray: Array = []
// Fill the array with objects
var array = swiftarray.valueForKeyPath("key.path") // Invalid, produces a compile-time error
回答1:
It seems that KVC on native Swift objects is just not supported. Here's the most elegant workaround I've found:
var swiftarray: Array = []
// Fill the array with objects
var array: NSArray = (swiftarray as NSArray).valueForKeyPath("key.path") as NSArray
回答2:
I've found this:
var array = swiftarray.map({$0["key.path"]! as ObjectType})
回答3:
you can do the following:
let items : Array<String> = (myArray as AnyObject).valueForKeyPath("name") as! Array<String>
回答4:
How about this:
let names = array.map { $0.name }
Instead of using key paths you can directly refer to property or method.
来源:https://stackoverflow.com/questions/26367261/key-value-coding-kvc-with-array-dictionary-in-swift