Is self captured within a nested function

前端 未结 3 1796
攒了一身酷
攒了一身酷 2021-02-03 23:16

With closures I usually append [weak self] onto my capture list and then do a null check on self:

func myInstanceMethod()
{
    let myClosure =
            


        
相关标签:
3条回答
  • 2021-02-03 23:54

    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 ?

    0 讨论(0)
  • 2021-02-04 00:13

    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)
    }
    
    0 讨论(0)
  • 2021-02-04 00:14

    I use this template

    class A{
    
      func foo(){
    
         func bar(_ this:A){
           this.some();
         }
    
         bar(self);
      }
    
      func some(){
    
      }
    
    }
    
    0 讨论(0)
提交回复
热议问题