Swift基础入门知识学习(11-2)-閉包-第二篇-讲给你懂

TED演讲的8个秘诀:学习18分钟高效表达-重点笔记

Swift基础入门知识学习(11-1)-闭包-第一篇-讲给你懂


闭包及其運用

可能很多人用了很久的闭包都还不太清楚闭包到底是什么,在这里提供一個理解思路供参考。

闭包本质上和函数一样都是代码块,而闭包更加灵活。

闭包、嵌套函数、函数

更好地使用闭包前需要理清3者的联系和区别。

首先看3种函数的定义:

函数

func eatApple1(_ a: Int, _ b: Int) -> Int {
    return a + b
}

闭包

var eatApple2 = {(a: Int, b: Int) -> Int in
    return a + b
}

嵌套函数

func eatApple3(_ a: Int, _ b: Int) -> Int {
    //嵌套函数
    func eatApple(a: Int, b: Int) -> Int {
        return a + b
    }
    
    return eatApple(a: a, b: b)
}

調用

eatApple1(3, 3)
eatApple2(3, 3)
eatApple3(3, 3)

从上面的定义可以看出函数和嵌套函数其实是一回事,唯一的区别是,嵌套函数是定义在一个函数内部的函数,对外部是隐藏的,只能在其定义的函数内部有效。而闭包与函数的不同要多一些:

  1. 不需要使用func关键字。
  2. 函数有名称如:eatApple,而闭包是没有名称的。
  3. 闭包的参数和函数体都要使用{ }包起来,在参数后要使用in关键字连接函数体。
  4. 闭包可以作为一种类型赋值给一个变量,上面代码中的闭包类型是: (Int, Int) -> Int 。

上面从定义上分析了三者的不同。

多个参数的闭包

为了确保一切都清楚,我们将使用两个参数编写另一个闭包示例。

这一次,我们的travel()功能将需要闭包。指定某人旅行到哪里,以及他们要走的速度。这意味着我们需要为参数的类型使用(String, Int) -> String:

func travel(action: (String, Int) -> String) {

    print("I'm getting ready to go.")
    let description = action("London", 60)
    print(description)
    print("I arrived!")
    
}

我们将使用尾随闭包和闭包参数簡称来调用它。由于这接受两个参数,我们将获得$0和$1:

travel {

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

有些人更傾向不使用$0闭包参数簡称,因为它可能会令人混淆。没关系,都可以,打你喜歡的代碼就好。

理论上,闭包可以随你所欲地使用参数,但在实践中,通常看到的大多数示例都使用零到三个参数。使用$0、$1和$2可能是我们可以合理处理的闭包参数簡称,了解这個事实可能会对你有所帮助。

不是说你不能写超過四个或更多参数的闭包,只是這樣的情況非常罕见,大多一两个参数,三个参数都不常見了。

闭包总结

  1. 可以为变量分配闭包,然后调用它们。
  2. 闭包可以接受参数并返回值,就像是一般的函数。
  3. 可以将闭包作为参数传给函数,这些闭包可以有自己的参数和返回值。
  4. 如果函数的最后一个参数是闭包,可以使用尾随闭包语法。
  5. Swift提供$0和$1闭包参数簡称,但不是每个人都要使用它。
  6. 如果在闭包中使用外部值,它们将被捕获,以便闭包稍后可以引用。

Swift基础入门知识学习(12)-枚举(列举)-讲给你懂

高效阅读-事半功倍读书法-重点笔记-不长,都是干货

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MillVA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值