【发布时间】:2018-06-25 06:06:50
【问题描述】:
在 xcode10 beta 中使用 swift 4.2
我正在尝试创建一个 swift 类,将其存储为一个字段,一个指向该类成员函数的闭包。
这个想法是策略模式的一种变体。我希望能够更改在运行时调用的函数。在此示例中,公共 f() 函数调用内部闭包。闭包应该存储 f_release 或 f_debug,后者只是添加一些调试打印语句:
class MyClass {
var n:Int = 0
var aFunc: (Int) -> ()
init() {
aFunc = f_release
}
public func f(number:Int) {
aFunc(number)
}
func f_release(number:Int) {
n = n + number
}
func f_debug(number:Int) {
print(n)
f_release(number:number)
print(n)
}
}
我的问题来自初始化。在上面的示例中,编译器抱怨: _'self' 在所有存储属性初始化之前用于方法调用'f_release'_
我尝试使用默认值初始化 aFunc 变量来解决替换行的问题
var aFunc: (Int) -> ()
带线
var aFunc: (Int) -> () = f_release
但是对于这种情况,编译器现在抱怨: 无法将类型 '(MyClass) -> (Int) -> ()' 的值转换为指定类型 '(Int) -> ()'
我做错了什么? 提前致谢
【问题讨论】:
标签: swift initialization closures