通过Swift使用键值编程(KVP)
在Objective-C和Cocoa中,通过使用键值编程(KVP),许多任务可以在没有显式循环的情况下完成。例如,我可以用一行代码找到数组中的最大数:通过Swift使用键值编程(KVP),swift,Swift,在Objective-C和Cocoa中,通过使用键值编程(KVP),许多任务可以在没有显式循环的情况下完成。例如,我可以用一行代码找到数组中的最大数: NSNumber * max = [numbers valueForKeyPath:@"@max.intValue"]; 我怎样才能对斯威夫特做同样的事情?数组似乎不支持valueForKeyPath方法。我不确定KVP,但Swift当前不支持KVO。另请参阅此开发人员论坛线程: 您仍然可以(至少)使用Swift on properties提供
NSNumber * max = [numbers valueForKeyPath:@"@max.intValue"];
我怎样才能对斯威夫特做同样的事情?数组似乎不支持valueForKeyPath方法。我不确定KVP,但Swift当前不支持KVO。另请参阅此开发人员论坛线程:
您仍然可以(至少)使用Swift on properties提供的
didSet
willSet
。我想总比什么都没有好 数组实际上会响应valueForKeyPath函数-您只需将数组强制转换为AnyObject
,这样编译器就不会抱怨了。详情如下:
var max = (numbers as AnyObject).valueForKeyPath("@max.self") as Double
甚至,对于对象的并集:
(labels as AnyObject).valueForKeyPath("@unionOfObjects.text")
如果上面的标签
是标签的集合,则上面的标签将返回每个标签的文本
属性的所有字符串的数组
它也相当于以下内容:
(labels as AnyObject).valueForKey("text")
。。。正如在Objective-C:)中一样,您也可以使用数组的reduce函数
let numbers = [505,4,33,12,506,21,1,0,88]
let biggest = numbers.reduce(Int.min,{max($0, $1)})
println(biggest) // prints 506
很好的解释