斯威夫特 - 重点来自哪里?

时间:2015-01-15 22:53:08

标签: ios swift

我很难理解下面的简单功能。神秘的“点”来自哪里?

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
    }
}

3 个答案:

答案 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
}

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