【swift-总结】闭包

其实闭包就是函数
作为条件的函数

闭包表达式

首先声明一个数组

var names = ["Charis", "Alex", "Ewa", "Barry", "Daniella"]

将这个数组按照字母排序

声明一个闭包函数

func backwards(s1: String, s2:String) -> Bool  {
    return s1 > s2
}

sorted()函数返回一个数组,sort()函数返回空,排序自身

///传入闭包函数
names.sort(backwards)

使用闭包表达式

//闭包表达式就是一个函数在花括号里面
names.sort({(s1: String, s2: String) -> Bool in return s1 > s2})

又因为swift的值是可推断类型

上面的又可以简化

var reversed = names.sorted({s1, s2 in return s1 > s2})

单闭包隐式返回

//会隐式return
names.sorted({s1, s2 in s1 > s2})

名称缩写

names.sort({$0 > $1})

运算符函数

names.sort(>)

尾随闭包

有时候闭包表达式太麻烦,可以把闭包写在调用函数后面的花括号中

//调用sort函数,后面添加花括号,然后闭包表达式就写在这里
names.sort() {$0 > $1}

官方例子

//声明一个字典
let digitNames = [0:"zero", 1:"one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine"]

//一个数组
let numbers = [16, 58, 510]

//调用map函数,里面传入闭包
let strings = numbers.map{

//传入一个number返回一个String
    (var number) -> String in
    var output = ""
    while number > 0 {
        output = digitNames[number % 10]! + output//找到每一个数字,转为字符串
        number /= 10
    }
    return output
}

值捕获

首先闭包是引用类型
官方例子

///定义一个返回() -> Int 类型的函数
func makeIncrementor(forIncrement amount:Int) -> () -> Int {
    var runningTotal = 0

    //一个闭包函数
    func incrementor() -> Int {
        runningTotal += amount;
        return runningTotal
    }

    //返回这个闭包,此时这个闭包已经包含runningTotal和amount的值
    return incrementor
}
let incrementByTen1 = makeIncrementor(forIncrement: 10)

let incrementByTen2 = makeIncrementor(forIncrement: 1)


incrementByTen1()   //10 所以值会被闭包一直保留
incrementByTen1()   //20

incrementByTen2()   //1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值