2015-10-04 47 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)