2015-02-09 108 views
2

新編程!如何創建一個字典數組?

我想在斯威夫特創建一個結構裏面字典的數組,像這樣:

var dictionaryA = [ 
    "a": "1", 
    "b": "2", 
    "c": "3", 
    ] 
var dictionaryB = [ 
    "a": "4", 
    "b": "5", 
    "c": "6", 
    ] 
var myArray = [[ : ]] 
myArray.append(dictionaryA) 
myArray.append(dictionaryB) 

這工作正常,在操場上,但是當我把它變成一個Xcode項目,一個結構裏面,具有附加函數的行會產生錯誤「預期聲明」。

我也嘗試過使用+ =運算符獲得相同的結果。

如何在結構體內成功構造這個數組?

+0

其中,是 「結構」 的代碼?你發佈的代碼片段看起來沒問題,編譯得很好。 – Bill 2015-02-09 12:56:34

回答

8

從你的錯誤Expected declaration,我屁股UME你正在做的一樣:

struct Foo { 
    var dictionaryA = [ 
     "a": "1", 
     "b": "2", 
     "c": "3", 
    ] 
    var dictionaryB = [ 
     "a": "4", 
     "b": "5", 
     "c": "6", 
    ] 
    var myArray = [[ : ]] 
    myArray.append(dictionaryA) // < [!] Expected declaration 
    myArray.append(dictionaryB) 
} 

這是因爲you can place only "declarations" in the struct body,而myArray.append(dictionaryA)是不是一個聲明。

你應該在其他地方做這件事,例如在初始化器中。下面的代碼編譯。

struct Foo { 
    var dictionaryA = [ 
     "a": "1", 
     "b": "2", 
     "c": "3", 
    ] 
    var dictionaryB = [ 
     "a": "4", 
     "b": "5", 
     "c": "6", 
    ] 
    var myArray = [[ : ]] 

    init() { 
     myArray.append(dictionaryA) 
     myArray.append(dictionaryB) 
    } 
} 

但作爲@AirspeedVelocity提到的,你應該提供有關myArray,或myArray更多信息將Array<NSDictionary>,我覺得你不期待。

也許或也許不是,你想要什麼是一樣的東西:

總之,正確的解決方案將取決於你真正要做的改變

struct Foo { 
    static var dictionaryA = [ 
     "a": "1", 
     "b": "2", 
     "c": "3", 
    ] 
    static var dictionaryB = [ 
     "a": "4", 
     "b": "5", 
     "c": "6", 
    ] 

    var myArray = [dictionaryA, dictionaryB] 
} 

但是,我不知道,你爲什麼不只是:

struct Foo { 

    var myArray = [ 
     [ 
      "a": "1", 
      "b": "2", 
      "c": "3", 
     ], 
     [ 
      "a": "4", 
      "b": "5", 
      "c": "6", 
     ] 
    ] 
} 
+0

在init方法內部放置append函數,謝謝。我應該提到我嘗試過直接聲明整個數組(根據你最後的建議),但這會導致Xcode陷入「索引」過程。 – 2015-02-09 22:09:00

6

問題在於這一行:

var myArray = [[ : ]] 

你需要告訴斯威夫特什麼類型myArray是 - [[:]]沒有足夠的信息。

你可以做到這一點明確的方法:

var myArray: [[String:String]] = [[ : ]] 

或者,如果可行的話,隱含使用第一或你計劃在這兩個值:

var myArray = [dictionaryA] 
var myArray = [dictionaryA,dictionaryB] 

(作爲替代明確的空版本,你也可以寫var myArray = [[String:String]](),這是var myArray = Array<Dictionary<String,String>>()的簡寫)

0

或者你可以使用元組數組that's更容易,就像這樣:

var myArray:[(a:String,b:String,c:String)] = [] 

並添加任何元素,您以後需要:

self.myArray.append((a:"A",b:"B",c:"c")) 

而只使用它們:

self.myArray[index].a 
self.myArray[index].b 
self.myArray[index].c