使用闭包我通常会将[弱自我]附加到我的捕获列表中,然后对自我进行空检查:
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)
}
答案 0 :(得分:25)
不幸的是,只有闭包有"捕获列表"像[weak self]
这样的功能。对于嵌套函数,您必须使用普通的weak
或unowned
变量。
func myInstanceMethod() {
weak var _self = self
func nestedFunction(result : Bool) {
_self?.anotherInstanceMethod()
}
functionExpectingClosure(nestedFunction)
}
答案 1 :(得分:0)
我使用此模板
class A{
func foo(){
func bar(_ this:A){
this.some();
}
bar(self);
}
func some(){
}
}
答案 2 :(得分:-2)
似乎不再是这种情况了。这在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
如何被捕获?