我在尝试创建存储函数数组的变量时遇到以下问题:
class MySwiftClass {
// Compilation Error: '()' is not a subtype of 'MySwiftClass'
var arrayOfFunctions: [() -> Int] = [myFunction]
func myFunction() -> Int {
return 0
}
}
实际上这段代码无法编译错误:
'()'不是'MySwiftClass'的子类型
但是如果在运行时设置这个数组就可以了:
class MySwiftClass {
var arrayOfFunctions: [() -> Int] = [() -> Int]()
init() {
arrayOfFunctions = [myFunction]
}
func myFunction() -> Int {
return 0
}
}
有人可以解释这是Swift编译器的错误还是预期的行为?在第一种情况下我没有看到编译错误的任何原因,而且错误描述对我来说是有意义的。
答案 0 :(得分:3)
这是Swift的设计。分配给属性的初始化程序(在您的情况下为arrayOfFunctions
)在self
运行之前无法访问init
。在您的情况下,它正在尝试访问self.myFunction
。您只能通过self
方法安全访问init
。
答案 1 :(得分:0)
正如@tng所述,这是正确的,我想提出一个使用静态方法的解决方案,如下所示:
class MySwiftClass {
var arrayOfFunctions: [() -> Int] = [MySwiftClass.myFunction]
static func myFunction() -> Int {
return 0
}
}