SwiftUI-Day6-7 闭包

吐槽

Xcode升级,什么appdelegate都没有了,现在全是swiftUI。。。
下面的代码是playground的代码,不是swiftUI View。
参考资料:
https://www.hackingwithswift.com/100/swiftui/6
https://www.hackingwithswift.com/100/swiftui/7
时间:10 October, 2020

结果

运行快捷键:shift+command+回车
删除当前行:option+D

简单的闭包

let driving = {
    print("I'm driving in my car")
}
driving()

带参数的闭包

let driving = { (place: String) in
    print("I'm going to \(place) in my car")
}
driving("London")

有返回值的闭包

let drivingWithReturn = { (place: String) -> String in
    return "I'm going to \(place) in my car"
}
let message = drivingWithReturn("London")
print(message)

闭包作为参数

let driving = {
    print("I'm driving in my car")
}
func travel(action: () -> Void) {
    print("I'm getting ready to go.")
    action()
    print("I arrived!")
}
travel(action: driving)

尾随闭包

不用再定义闭包参数了

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

//可以简写成
travel {
    print("I'm driving in my car")
}

尾随闭包并带参数

func travel(action: (String) -> Void) {
    print("I'm getting ready to go.")
    action("London")
    print("I arrived!")
}
travel { (place: String) in
    print("I'm going to \(place) in my car")
}

尾随闭包并带返回值

func travel(action: (String) -> String) {
    print("I'm getting ready to go.")
    let description = action("London")
    print(description)
    print("I arrived!")
}
travel { (place: String) -> String in
    return "I'm going to \(place) in my car"
}

闭包简写

原始

func travel(action: (String) -> String) {
    print("I'm getting ready to go.")
    let description = action("London")
    print(description)
    print("I arrived!")
}
travel { (place: String) -> String in
    return "I'm going to \(place) in my car"
}

去掉输入参数类型

travel { place -> String in
    return "I'm going to \(place) in my car"
}

去掉返回值类型

travel { place in
    return "I'm going to \(place) in my car"
}

闭包只有一行代码,可以去掉return关键字

travel { place in
    "I'm going to \(place) in my car"
}

可以用下标表示第几个传入参数,从而代替关键字

travel {
    "I'm going to \($0) in my car"
}

写成这样,谁知道这是在干啥。。

多参数闭包

func travel(action: (String, Int) -> String) {
    print("I'm getting ready to go.")
    let description = action("London", 60)
    print(description)
    print("I arrived!")
}
travel {
    "I'm going to \($0) at \($1) miles per hour."
}

函数返回一个闭包

func travel() -> (String) -> Void {
    return {
        print("I'm going to \($0)")
    }
}
let result = travel()
result("London")
//不建议
let result2 = travel()("London")

闭包捕获

虽然变量counter在函数内部,但是这个变量用在了闭包中, 这个时候就会发生闭包捕获的情况,也就是保持变量状态。

func travel() -> (String) -> Void {
    var counter = 1
    return {
        print("\(counter). I'm going to \($0)")
        counter += 1
    }
}
let result = travel()
result("London")

result("London")
result("London")
result("London")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值