我的目标是创建一个包含数组的类。数组的元素将是同一类的方法。喜欢:
class MyClass {
lazy var functions = [self.myFirstMethod, self.mySecondMethod]
deinit {
print("Deinit")
}
func myFirstMethod() {
// Do Something
}
func mySecondMethod() {
// Do Something
}
func executeAll() {
for f in functions {
f()
}
}
}
当我打电话给executeAll()
它工作正常,我达到了我的预期结果:
var myObject = MyClass()
myObject.executeAll()
问题是,它创建了引用循环。实例MyClass
保存数组functions
and functions
数组保存self
。所以如果我写下面的代码:
var myObject: MyClass? = MyClass()
myObject.executeAll()
myObject = nil
它不会调用deinit
方法因为这个强引用循环。
如何将方法指针添加到数组中weak self
?我不想使用函数的本地副本executeAll
method.
如果方法列表独立于特定实例,那么您可以将其设为类型属性并避免引用循环:
class MyClass {
static let functions = [myFirstMethod, mySecondMethod]
func executeAll() {
for f in MyClass.functions {
f(self)()
}
}
// ...
}
数组元素是以下类型的“柯里化函数”
(MyClass) -> () -> ()
compare 实例方法是 Swift 中的“柯里化”函数 https://oleb.net/blog/2014/07/swift-instance-methods-curried-functions/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)