【问题标题】:Shortcut closure syntax in case of [weak self][weak self] 情况下的快捷关闭语法
【发布时间】:2021-05-02 08:12:24
【问题描述】:

让我们调用一些函数,它有一个转义闭包作为参数:

someFunc(complition: {
    self.someAnotherFunc()
})

相当于:

someFunc(complition: { [self] in
    someAnotherFunc()
})

相当于:

someFunc(someAnotherFunc)

正确吗?
我认为那是正确的。
self 在上方强烈捕获。

那么 [weak self] 的情况呢?
是我们唯一可以写的方法吗?:

someFunc(complition: { [weak self] in
    self?.someAnotherFunc()
})

我们就不能写成someFunc(someAnotherFunc)吗?

附:好吧,我知道还有另外一种写法:

someFunc { [weak self] in
    self?.someAnotherFunc()
}

但是更简洁的形式呢?

【问题讨论】:

    标签: swift syntax closures swift5


    【解决方案1】:

    目前(Swift 5.4)没有别的

    实际上,闭包的默认行为是捕获self。但是一旦你在里面引用self,它就会创建一个对它的强引用。

    有一个关于它的公开讨论here on swift.org

    由于你没有提到你的函数的代码,我不能确定你的需求,但一般来说,你可能会遇到一些可以忽略自我捕获的情况:

    1. 当您需要非逃逸闭包时
    2. 当父函数是类函数时(如UIView.animate...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2015-07-02
      • 2013-06-09
      相关资源
      最近更新 更多