swift,闭包


函数实际上是闭包的特殊情况,闭包无需名称,放到大括号内即可。

使用in 到特定参数和主体的返回值。

{(parameters)->return type in 
statements
}



内置sorted ,例:

let numbers=[1,6,7,0,2,4,3]

func  numberSort(n1:Int,n2:Int)->bool{

return n1>n2

}

var newNumbers=sorted(numbers,numberSort)


sorted改成闭包的形式,


var newNumbers2=sorted(numbers,{

(n1:Int,n2:Int)->Bool in

return n1>n2

})

看到形式其实就是函数,只不过闭包没有名称了对比一下,就可以看出来了。

func 函数 (n1:Int,n2:Int)->Bool  {

return n1>n2

}

下面的是闭包形式,

{

(n1:Int,n2:Int)->Bool in

return n1>n2

}


进一步优化,使用推断,根据传递过来的数据,推断类型,故可以去掉参数类型,如

var newNumbers3=sorted(numbers,{

(n1,n2)->Bool in

return n1>n2

})

闭包省去return,如

var newNumbers4=sorted(numbers,{

(n1,n2)->Bool inn1>n2

})

参数简写,简写参数用$符号,如

var newNumbers5=sorted(numbers,{

$0>$1

})


进一步简写,操作符本身是个函数,故只需要写出操作符即可

var newNumbers6=sorted(numbers,>)







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Swift 中,闭包是一种自包含的函数代码块,可以在代码中被传递和使用。闭包有能力捕获和存储其所在上下文中任意常量和变量的引用。当闭包中引用了外部的对象时,为了避免循环引用(strong reference cycle),我们需要使用弱引用(weak reference)。 在闭包中使用弱引用可以防止闭包持有外部对象的强引用,从而避免循环引用的问题。循环引用指的是两个或多个对象之间相互持有对方的强引用,导致它们无法被释放,造成内存泄漏。 在 Swift 中,我们可以使用 `[weak self]` 或者 `[unowned self]` 语法来声明一个对外部对象的弱引用。`[weak self]` 会将对外部对象的引用标记为弱引用,而 `[unowned self]` 则标记为无主引用。 下面是一个使用弱引用的闭包示例: ```swift class SomeClass { var completionHandler: (() -> Void)? func doSomething() { completionHandler = { [weak self] in // 使用 weak self 避免循环引用 guard let self = self else { return } // 在闭包中使用 self print("Doing something in \(self)") } completionHandler?() } } let instance = SomeClass() instance.doSomething() ``` 在上面的示例中,我们使用了 `[weak self]` 来声明对外部对象的弱引用。在闭包中,我们使用了 `guard let self = self else { return }` 来确保在闭包执行时,外部对象仍然存在。这样可以避免在闭包中使用已经被释放的对象。 需要注意的是,使用弱引用可能会导致外部对象在闭包执行期间被释放,因此在闭包中使用弱引用的对象时,需要进行额外的判断以确保其存在。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值