考虑具有简单属性class Sheep
var position: CGRect
class Sheep {
var position: CGRect
init() {
position = CGRectZero
}
}
在一群绵羊中Array<Sheep>
如何获得Sheep
最高的position.origin.y
?
我尝试了以下内容,但获得了error: could not find member y
func firstSheep(sheeps: Array<Sheep>) -> Sheep
{
return sheeps.reduce(sheeps[0]) {max($0.position.origin.y, $1.position.origin.y)}
}
所有类导入
import Foundation
import QuartzCore
答案 0 :(得分:2)
max
将返回一个CGFloat(无论哪个更大)。相反,您想要返回具有最高y值的绵羊:
return sheeps.reduce(sheeps[0]) {
($0.position.origin.y > $1.position.origin.y) ? $0 : $1
}
但要小心,因为如果sheeps
为零,此方法将抛出运行时错误。我会将返回值设为可选,并执行以下操作:
func firstSheep(sheeps: [Sheep]) -> Sheep?
{
let initial : Sheep? = nil
return sheeps.reduce(initial) {
if !$0 {
return $1
}
return ($0!.position.origin.y > $1.position.origin.y) ? $0 : $1
}
}
您需要将initial设置为单独的变量,以便按reduce
中的泛型来正确。