2015-10-04 87 views
0

我有一个数据结构,它是一个数据提供者,并且设置了一个值数组,并且我想要设置的一个特定值是来自实例成员的值。为什么数组初始化在swift中引用常量成员变量?

到框架它作为一个具体的例子,我得到一个错误,当我做

struct DataProvider { 
    let largeInt = 50000 
    let ints: [Int] = [2, 3, 4, largeInt] 
} 

编译器说

实例成员“largeInt”不能对数据类型“的DataProvider”

可以使用

有没有一种方法,我可以引入largeInt作为整数初始化的一部分,而不是实际上用字面值50000替换它?

+0

尝试specifing类型:'让largeInt:INT = 50000' –

回答

5

原因已经被vacawama解释。而且你还可以使用静态

struct DataProvider { 
    static let largeInt = 50000 
    let ints: [Int] = [2, 3, 4, largeInt] 
} 
+0

是啊,这工作也是如此。 Upvoted。在这种情况下,'largeInt'就像结构外部的'DataProvider.largeInt'一样被访问。在OP最初的例子中,'largeInt'是一个实例变量,可以从一个实例中访问,例如'DataProvider()。largeInt'。 – vacawama

4

您定义它的方式的问题是,largeInt不可用于读取,直到结构完成初始化,因此您不能在另一个属性的初始化中使用它。

相反,内联初始化它,你可以用一个初始化初始化:

struct DataProvider { 
    let largeInt: Int 
    let ints: [Int] 
    init() { 
     largeInt = 50000 
     ints = [2, 3, 4, largeInt] 
    } 
} 

或者你也可以通过largeInt进入初始化:

struct DataProvider { 
    let largeInt: Int 
    let ints: [Int] 

    init(largeInt: Int) { 
     self.largeInt = largeInt 
     ints = [2, 3, 4, largeInt] 
    } 
} 

let dp = DataProvider(largeInt: 50000)