我很难理解下面的简单功能。神秘的“点”来自哪里?
typealias Position = CGPoint
typealias Distance = CGFloat
typealias Region = Position -> Bool
func circle(radius: Distance) -> Region {
return { point in
sqrt(point.x * point.x + point.y * point.y) <= radius
}
}
答案 0 :(得分:4)
circle
函数返回一个具有此声明的闭包:
(Position) -> Bool
point
是传递给闭包的参数的名称,Position
类型 - 可能会重写函数,如下所示:
func circle(radius: Distance) -> Region {
let closure: Region = { (point: Position) -> Bool in
return sqrt(point.x * point.x + point.y * point.y) <= radius
}
return closure
}
您可以将circle
函数的返回值赋给变量:
let closure = circle(1.0)
然后调用它:
let p = CGPoint(x: 1.0, y: 1.0)
closure(p)
p
参数是闭包声明中所谓的(并引用为)point
答案 1 :(得分:1)
point
引用您在return
语句后定义的闭包的参数。请在此处查看更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
答案 2 :(得分:0)
你的关闭
{ point in
sqrt(point.x * point.x + point.y * point.y) <= radius
}
从上下文理解为
{ (point:Position) -> Bool in
sqrt(point.x * point.x + point.y * point.y) <= radius
}
这相当于功能delaration
func anonymous(point:Position) -> Bool {
return sqrt(point.x * point.x + point.y * point.y) <= radius
}
我在这里使用了匿名符号,因为函数必须有一个名称,但这只是代码是合法的 - 它实际上没有名称。