Swift - 重点从何而来?
Swift - Where does the point comes from?
我很难理解下面的简单函数。神秘的'point'从何而来?
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
}
}
point
指的是您在 return
语句之后定义的闭包的参数。在此处查看更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
circle
函数 return 是一个具有以下声明的闭包:
(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
函数的 return 值赋给一个变量:
let closure = circle(1.0)
然后调用它:
let p = CGPoint(x: 1.0, y: 1.0)
closure(p)
p
参数在闭包声明
中被称为(并引用为)point
你的关闭
{ 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
}
我在这里使用了匿名符号,因为函数必须有一个名字,但这只是代码是合法的——它实际上没有名字。
我很难理解下面的简单函数。神秘的'point'从何而来?
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
}
}
point
指的是您在 return
语句之后定义的闭包的参数。在此处查看更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
circle
函数 return 是一个具有以下声明的闭包:
(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
函数的 return 值赋给一个变量:
let closure = circle(1.0)
然后调用它:
let p = CGPoint(x: 1.0, y: 1.0)
closure(p)
p
参数在闭包声明
point
你的关闭
{ 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
}
我在这里使用了匿名符号,因为函数必须有一个名字,但这只是代码是合法的——它实际上没有名字。