2016-04-22 31 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时)如果你是不是在找词典作为我的例子数组上述建议,一个简单的静态类也是一个不错的选择。

只是我的直觉,但上面的例子看起来不像结构的典型用例。