2016-04-22 2 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 

ОБНОВЛЕНИЕ 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

Какой тип данных для загрузки? массив, dict, set, массив dicts, dict массивов и т. д.? – 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' для structs, потому что они предоставляются компилятором автоматически (это также отмечено в ответе @ pacification). – werediver

0

Что я интерпретировать из вашего вопроса, что вы хотите сделать объект массив для структуры и хранения в нем данных. Вот пример, который может вам помочь.

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

Где бы вы ни захотели получить доступ к массиву struct, вам придется объявить этот массив в этом классе.

var details = [TableData]() 

Теперь добавление данных в массив зависит от того, как вы хотите хранить данные в массиве struct. Поэтому я расскажу вам, как получить доступ к каждому элементу массива.

Сначала вы создаете объект struct, который будет хранить один набор данных структуры за раз.

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 s есть по умолчанию init метод (more info here), так что вам не нужно создавать.


UPDATE

Я хочу, чтобы инициализировать структуру массива 'испытательную' с длиной 200

Вы можете сделать это так:

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

Я хочу ввести данные для 'a', 'b' и 'c', используя этот синтаксис: [1,2,3, ...] Возможно ли это?

Ahm. Что должно быть в вашем случае type от a, b или c? Array?


UPDATE 1

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

Итак, если вы уверены, что a, b и c же массивы длины вы можете сделать так:

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

И все ваши данные будут сохранены.

+0

Благодаря 芮星晨, ishdeep и умиротворенности для ваших подобных ответов. Этот синтаксис работает, но это все еще не совсем то, что мне нужно. Я хочу инициализировать массив структуры «test» длиной 200. Я хочу ввести данные для «a», «b» и «c», используя этот синтаксис: [1,2,3, ...] Is это возможно? –

+0

@SimonYouens i update my answer – 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 является самым чистым способом использования структур. помнить также, что Structures не ссылочные типы, такие как классы, так что вы не используете экземпляры, а копируются значения (как при использовании Int или Strings)

Если вы не ищете массив словарей, как мой пример выше предположить, хороший статический класс также является хорошим кандидатом.

Просто мое чувство кишки, но ваш пример выше не похож на типичный пример использования для структур.

Смежные вопросы