将[weak self]
作为闭包参数传递和将[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]()
作为闭包参数传递有什么区别?
例如:
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
类型。()
表示空/无参数列表,以及使用Void
作为返回类型。这也是苹果在dispatch_block_t
定义中所做的。 - Martin R