闭包

木木木大约 2 分钟iOSSwift语法

闭包

创建基本闭包

创建了一个没有名称的函数,并将该函数分配给playing:

let playing = {
    print("I am to play basketball")
}

现在可以调用driving(),就像一个常规函数一样:

driving()

闭包参数

接受地名字符串作为其唯一的参数:

let playing = { (place: String) in
    print("I'm going to \(place) to play basketball")
}

函数和闭包有个区别是运行闭包时不使用参数标签。现在要调用playing():

playing("Beijing")

闭包返回值

需要in之前使用-> String,然后像正常函数一样使用return:

let playingWithReturn = { (place: String) -> String in
    return "I'm going to \(place) to play basketball"
}

调用闭包并打印其返回值:

let message = playingWithReturn("Beijing")
print(message)

闭合作为参数

把该闭包传递到函数中以便可以在该函数内运行,将参数类型指定为() -> Void。参数闭包“不接受任何参数,并返回Void”:

func travel(action: () -> Void) {
    print("I'm getting ready to go.")
    action()
    print("I arrived!")
}

定义闭包:

let playing = {
    print("I am to play basketball")
}

调用带参数为闭包的函数:

travel(action: playing)

尾随闭包

如果函数的最后一个参数是闭包,Swift允许使用特殊语法 calledtrailing 闭包语法。 与其将闭包作为参数传递,不如直接在大括号内的函数之后传递它:

func travel(action: () -> Void) {
    print("I'm getting ready to go.")
    action()
    print("I arrived!")
}

多参数闭包

这次函数将需要一个闭包,指定位置和速度。这意味着需要使用(String, Int) -> String作为参数的类型:

func travel(action: (String, Int) -> String) {
    print("I'm getting ready to go.")
    let description = action("Beijing", 30)
    print(description)
    print("I arrived!")
}

使用尾随闭包和速记闭包参数名称。接受两个参数得到$0和$1:

travel {
    "I'm going to \($0) at \($1) miles per hour."
}

函数返回闭包

就像可以将闭包传递给函数一样,也可以从函数中返回闭包。 一个不接受任何参数但返回闭包的travel()函数:

func travel() -> (String) -> Void {
    return {
        print("I'm going to \($0)")
    }
}

可以调用travel()来获取闭包,然后将其作为函数调用:

let result = travel()
result("Beijing")

从travel()调用返回值也是可以,虽然不推荐:

let result2 = travel()("Beijing")
上次编辑于:
贡献者: perhapsdone