在嵌套函数中自我捕获



使用闭包,我通常会将[weak self]附加到捕获列表中,然后对self:进行空检查

func myInstanceMethod()
{
    let myClosure =
    {
       [weak self] (result : Bool) in
       if let this = self
       { 
           this.anotherInstanceMethod()
       }
    }   
    functionExpectingClosure(myClosure)
}

如果我使用嵌套函数代替闭包,我如何对self执行null检查(或者检查是否有必要……或者使用这样的嵌套函数是否是一种好的做法),即

func myInstanceMethod()
{
    func nestedFunction(result : Bool)
    {
        anotherInstanceMethod()
    }
    functionExpectingClosure(nestedFunction)
}

遗憾的是,只有闭包具有类似[weak self]的"捕获列表"功能。对于嵌套函数,必须使用普通的weakunowned变量。

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

似乎不再是这样了。这在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() {
    }
}

问题仍然存在:self是如何被捕获的?

相关内容

  • 没有找到相关文章

最新更新