2016-04-22 58 views
1

如何將數據加載到Swift結構數組中?Swift - 將數據加載到結構數組

以下需要的語法是什麼?

struct TEST { 
    var a = 0 
    var b = 0 
    var c = 0 
} 

var test: [TEST] = [] 

// Data to load: 
// .a 1,2,3 
// .b 4,5,6 
// .c 7,8,9 

UPDATE 1

@pacification對不起用於響應的延遲。根據您的更新1,我有這樣的代碼,它沒有任何錯誤運行:

struct TEST { 
    var a: Int 
    var b: Int 
    var c: Int 
} 

var a: [Int] = [1,2,3] 
var b: [Int] = [4,5,6] 
var c: [Int] = [7,8,9] 

let test: [TEST] 

for (index, _) in a.enumerate() { 
    TEST(a: a[index], b: b[index], c: c[index]) 
} 

不過,我不能看到如何存儲值「測試」陣列英寸我錯過了什麼?

+2

什麼是要加載的數據類型?數組,字典,集合,數組的字典,數組的字典等? – ozgur

回答

0

也許你應該使用這個

struct test{ 
     var a:Int 
     var b:Int 
     var c:Int 
     init(a:Int,b:Int,c:Int){ 
      self.a = a 
      self.b = b 
      self.c = c 
     } 
    } 

func addSomeData(){ 
     var array:[test] = [] 
     array.append(test(a: 1, b: 2, c: 3)) 
     array.append(test(a: 4, b: 5, c: 6)) 
     array.append(test(a: 7, b: 8, c: 9)) 
    } 
+1

您不需要爲結構編寫這樣的''init',因爲它們是由編譯器自動提供的(這也在@ pacification的答案中提到)。 – werediver

0

你想一個數組對象在它的結構和存儲數據是我從你的問題解釋是。 以下是可能對您有所幫助的示例。

struct TableData{ 
let a : Int 
let b : Int 
let c : Int } 

如果你想要訪問結構數組,你必須在那個類中聲明該數組。

var details = [TableData]() 

現在將數據添加到數組取決於您希望如何將數據存儲在結構數組中。所以我會告訴你如何訪問數組中的每個元素。

首先您創建一個結構對象,一次存儲一組結構細節。

let data = Tabledata(a:1,b:4,c:7) 
details.append(data) 

OFC這將只是一個靜態分配,我會建議你使用一個循環來不斷收到信息,並將它們添加到表陣列。

for i..in 3{ 
    let data = Tabledata(a:some value,b:some value,c:some value) 
    details.append(data) 
      } 

假設你知道字典的循環和概念,你可以得到的值一定的價值,這將創建細節陣列中的3項。

讓我知道它是否有幫助,或者您是否需要進一步澄清。

0

你應該使用這樣的:

struct Test { 
    var a = 0 
    var b = 0 
    var c = 0 
} 


var test: [Test] = [ 
    Test(a: 1, b: 4, c: 7), 
    Test(a: 2, b: 5, c: 8), 
    Test(a: 3, b: 6, c: 9) 
] 

注意的是,該struct■找默認init方法(more info here),所以你不需要創建它。


UPDATE

我想 '測試' 結構陣列的200

長度初始化可以是這樣做的:

var test: [Test] = Array(count: 200, repeatedValue: Test()) 

我想使用以下語法輸入'a','b'和'c'的數據: [1,2,3,...]這可能嗎?

Ahm。什麼typea,bc應該在你的情況? Array


更新1

// Data to load: 
// .a 1,2,3 
// .b 4,5,6 
// .c 7,8,9 

所以,如果你確信abc相同長度的數組,你可以這樣做:

for (index, _) in a.enumerate() { 
    Test(a: a[index], b: b[index], c: [index]) 
} 

和所有數據將被存儲。

+0

感謝芮星晨,ishdeep和pacification爲您的類似答案。該語法的作品,但它仍然不是我所需要的。我想初始化長度爲200的'test'結構數組。我想用下面的語法輸入'a','b'和'c'的數據:[1,2,3,...] Is這可能嗎? –

+0

@SimonYouens我更新了我的答案 – pacification

+0

數據類型是Int。我有工作測試代碼,我聲明和加載三個單獨的數組,使用此語法:var a:[Int] = [1,2,3,...] –

0

難道這是語義? Swift中的結構是通用類型(如類)。它們非常相似,但有相關的差異,例如結構是價值類型。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html

也許你正在尋找一個詞典(鍵 - 值數據)?

var arryOfDictionaries = [ 
     ["a": 1, "b": 2, "c": 3], 
     ["a": 4, "b": 5, "c": 6], 
     ["a": 7, "b": 8, "c": 9] 
    ] 

    // Iterate of the array 
    for dict in arryOfDictionaries { 
     print(dict["a"]) // 1 4 7 
     print(dict["b"]) // 2 5 8 
    } 

    // Add more "rows" 
    var oneMore = ["a": 10, "b": 11, "c": 13] 
    oneMore["c"] = 12 
    arryOfDictionaries.append(oneMore) // Added [10, 11, 12] 

如果不是,那麼@pacification answer是使用結構的最簡潔的方法。 還記得Structures這樣你就不會使用實例不能引用類型,如類,而是複製值

(使用IntStrings時)如果你是不是在找詞典作爲我的例子數組上述建議,一個簡單的靜態類也是一個不錯的選擇。

只是我的直覺,但上面的例子看起來不像結構的典型用例。