Using key-value programming (KVP) with Swift

后端 未结 4 2261
小鲜肉
小鲜肉 2021-02-09 09:02

In Objective-C with Cocoa a lot of tasks can be accomplished without explicit loops by using Key-Value Programming (KVP). For example, I can find the largest number in an array

相关标签:
4条回答
  • 2021-02-09 09:35

    I'm not sure about KVP, but KVO isn't currently supported in Swift. See also this dev forums thread:

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

    0 讨论(0)
  • 2021-02-09 09:43

    You can still use (at least) the didSet willSet provided by Swift on properties. I guess it's better than nothing.

    0 讨论(0)
  • 2021-02-09 09:44

    The array will actually respond to valueForKeyPath function - you just need to cast the array to AnyObject so that the compiler doesn't complain. As follows:

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

    or even, for a union of objects:

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

    If labels above is a collection of labels, the above will return an array of all the strings of the text property of each label.

    It is also equivalent to the following:

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

    ... just as it is in Objective-C :)

    0 讨论(0)
  • 2021-02-09 09:46

    You can also use the reduce function of Array

    let numbers = [505,4,33,12,506,21,1,0,88]
    let biggest = numbers.reduce(Int.min,{max($0, $1)})
    println(biggest) // prints 506
    

    Good explanation here

    0 讨论(0)
提交回复
热议问题