使用Swift的键值编程(KVP)

时间:2014-06-04 14:15:06

标签: swift

在使用Cocoa的Objective-C中,通过使用键值编程(KVP),可以在没有显式循环的情况下完成许多任务。例如,我可以使用一行代码找到数组中的最大数字:

NSNumber * max = [numbers valueForKeyPath:@"@max.intValue"];

我怎么能用swift做同样的事情?数组似乎不支持valueForKeyPath方法。

4 个答案:

答案 0 :(得分:22)

数组实际上会响应valueForKeyPath函数 - 你只需要将数组转换为AnyObject,这样编译器就不会抱怨。如下:

var max = (numbers as AnyObject).valueForKeyPath("@max.self") as Double

甚至是对象联合:

(labels as AnyObject).valueForKeyPath("@unionOfObjects.text")

如果上面的labels是标签集合,则上面将返回每个标签的text属性的所有字符串数组。

它也等同于以下内容:

(labels as AnyObject).valueForKey("text")

......就像在Objective-C中一样:)

答案 1 :(得分:2)

您也可以使用Array

的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

好的解释here

答案 2 :(得分:1)

您仍然可以使用(至少)Swift在属性上提供的didSet willSet。我想它总比没有好。

答案 3 :(得分:0)

我不确定KVP,但Swift目前不支持KVO。另见这个开发论坛帖子:

https://devforums.apple.com/thread/227909