说我有一个具有完成功能的网络功能,我在消费者中多次使用它,如下所示:
class Network {
func getNumber(completion: @escaping (Int) -> ()) {
//some network code
completion(5)
}
}
class MyClass {
var num = 0
let network = Network()
func myFunc() {
network.getNumber { [weak self] (number) in
self?.num = number
}
}
func myFunc2() {
network.getNumber { [weak self] (number) in
self?.num = number
}
}
}
为避免重复的代码,我用一个函数替换了闭包 像这样:
class MyClass {
var num = 0
let network = Network()
func myFunc() {
network.getNumber(completion: self.handleData)
}
func myFunc2() {
network.getNumber(completion: self.handleData)
}
func handleData(_ number: Int) -> () {
self.num = number
}
}
此方法的问题是我无法在self
函数中将weak
捕获为handleData
。
通过将handleData
更改为closure
可以很容易地避免此问题:
lazy var handleData: (Int) -> () = { [weak self] in
self?.num = $0
}
所以我的问题是:有没有办法将weak self
应用于功能而不仅仅是闭包?