是什么传递[weak self]
作为参数,以将闭合VS传递[weak self]()
差()
例如之间的差:
dispatch_async(dispatch_get_main_queue()) { [weak self] in
//Some code here
}
V/S
dispatch_async(dispatch_get_main_queue()) { [weak self]() -> Void in
//Some code here
}
是什么传递[weak self]
作为参数,以将闭合VS传递[weak self]()
差()
例如之间的差:
dispatch_async(dispatch_get_main_queue()) { [weak self] in
//Some code here
}
V/S
dispatch_async(dispatch_get_main_queue()) { [weak self]() -> Void in
//Some code here
}
您不会将[weak self]()
作为参数传递给闭包。
[weak self]
是捕获列表和先于() -> Void
在封闭的表达。
的返回类型或两者的参数列表并返回,如果他们能 从上下文来推断类型可以省略,因此,所有这些都是有效的 ,完全等同:
dispatch_async(dispatch_get_main_queue()) { [weak self]() -> Void in
self?.doSomething()
}
dispatch_async(dispatch_get_main_queue()) { [weak self]() in
self?.doSomething()
}
dispatch_async(dispatch_get_main_queue()) { [weak self] in
self?.doSomething()
}
闭合需要一个空参数列表()
并具有Void
返回类型。
@MartinR更新后的代码。实际上,在一些实现中,我看到[weak self]没有使用圆括号,有些我认为它被用作[weak self]()。这两者之间的区别究竟是什么? –