Key-Value Coding (KVC) with Array/Dictionary in Swift

怎甘沉沦 提交于 2019-12-18 13:27:11

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!