Is self captured within a nested function

淺唱寂寞╮ 提交于 2019-12-03 01:43:45
rintaro

Unfortunately, only Closures have "Capture List" feature like [weak self]. For nested functions, You have to use normal weak or unowned variables.

func myInstanceMethod() {
    weak var _self = self
    func nestedFunction(result : Bool) {
        _self?.anotherInstanceMethod()
    }

    functionExpectingClosure(nestedFunction)
}

I use this template

class A{

  func foo(){

     func bar(_ this:A){
       this.some();
     }

     bar(self);
  }

  func some(){

  }

}
MLefrancois

Does not seem to be the case anymore. This is valid in swift 4.1:

class Foo {
    var increment = 0
    func bar() {
        func method1() {
            DispatchQueue.main.async(execute: {
                method2()
            })
        }

        func method2() {
            otherMethod()
            increment += 1
        }
        method1()
    }

    func otherMethod() {

    }
}

The question remains: How is self captured ?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!