【发布时间】:2016-02-08 21:32:35
【问题描述】:
给定一个对象不匹配的数据结构:
1> import Foundation
2> let d: NSDictionary = ["test": [["name": "Dick", "age": 101], ["name": "Jane"]]]
valueForKeyPath: 将返回子对象总数的值:
3> d.valueForKeyPath("test.name") as! NSArray
$R2: NSArray = "2 values" {
[0] = "Dick"
[1] = "Jane"
}
即使叶键在所有情况下都不存在:
4> d.valueForKeyPath("test.age") as! NSArray
$R3: NSArray = "2 values" {
[0] = Int64(101)
[1] = {
NSObject = {
isa = NSNull
}
}
}
有没有办法只获取现有的ages,而没有NSNull 的实例?
如果有多个没有叶子键的子对象,@distinctUnionOfArrays 等会有所帮助,但您仍然只剩下一个 NSNull。
顺便说一句,如果叶键完全未知,则只返回 NSNulls:
5> d.valueForKeyPath("test.dog") as! NSArray
$R4: NSArray = "2 values" {
[0] = {
NSObject = {
isa = NSNull
}
}
[1] = {
NSObject = {
isa = NSNull
}
}
}
相反,如果根密钥未知,则返回nil:
6> d.valueForKeyPath("dog.name")
$R5: AnyObject? = nil
这个逻辑让我觉得前后矛盾,但也许我遗漏了什么?
【问题讨论】:
标签: ios nsobject foundation key-value-coding