1

我在尝试创建一个存储函数数组的变量时遇到以下问题:

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 编译器的错误还是预期的行为?在第一种情况下,我没有看到任何编译错误的原因,而且错误描述对我来说是有意义的。

4

2 回答 2

3

这是 Swift 设计的。分配给属性(在您的情况下为 )的初始化程序在运行之前arrayOfFunctions无法访问。在您的情况下,它正在尝试访问. 您只能在方法中安全访问。selfinitself.myFunctionselfinit

在“安全检查 4”中查看https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

于 2015-03-19T20:08:34.837 回答
0

正如@tng 所说,这是正确的,我想提出一个使用静态方法的解决方案,如下所示:

class MySwiftClass {


    var arrayOfFunctions: [() -> Int] = [MySwiftClass.myFunction]

    static func myFunction() -> Int {
        return 0
    }
}
于 2015-09-11T22:44:10.017 回答