Swift 快速弱自我功能保留

Swift 快速弱自我功能保留,swift,automatic-ref-counting,Swift,Automatic Ref Counting,如果我有一个引用弱var weakSelf=self的闭包,我可以通过weakSelf将该闭包更改为直接函数引用吗 struct ClosureHolder { let closure: () -> Void } class ClosureSource { func hello() { NSLog("hello") } func createWeakSelfWithinInnerClosureClosureHolder() -> C

如果我有一个引用弱var weakSelf=self的闭包,我可以通过
weakSelf
将该闭包更改为直接函数引用吗

struct ClosureHolder {
    let closure: () -> Void
}

class ClosureSource {
    func hello() {
        NSLog("hello")
    }

    func createWeakSelfWithinInnerClosureClosureHolder() -> ClosureHolder {
        weak var weakSelf = self
        return ClosureHolder(closure: {
            weakSelf?.hello()
        })
    }

    func createWeakSelfDotHelloClosureHolder() -> ClosureHolder {
        weak var weakSelf = self
        // The code below won't compile because weakSelf is an Optional.
        // Once I unwrap the optional, I no longer have a weak reference.
        // return ClosureHolder(closure: weakSelf.hello)

        // this strongifies the weak reference. :(
        return ClosureHolder(closure: weakSelf!.hello)
    }
}

我更喜欢像
createWeakSelfDotHelloClosureHolder
,而不是
createweakselfwithinnelclosureholder
,不,你不能。说
self.foo
(如果
foo
是一种方法)与说
MyClass.foo(self)
完全一样。以这种方式出现的方法总是保持对接收者对象的强引用。如果您想要维护弱引用,那么您需要坚持使用
{weakSelf?.hello()}
方法。

您在这里试图做什么,而这些都不是由您处理的?我不知道闭包捕获列表。我认为这可能激发了一个更好的解决方案。