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
}

我在这里使用了匿名符号,因为函数必须有一个名字,但这只是代码是合法的——它实际上没有名字。