2014-11-04 10 views
2

Так что мой код, как это (площадка)Swift: Брус добавить товары в массив с двумя значениями

import Foundation 

public class Node {} 

var test: Node = Node() 
var arrayTest = [Int, Node]() 

arrayTest.append(2, test) 

Error xCode shows @ append Line: Accessing members of protocol type value 'Int' is unimplemented 

Но если изменить второе значение массива из «Node» в «String» все работает отлично. Если я удалю «Int», так что его единственный массив узлов тоже работает. Что мне не хватает? Почему он не работает так?

ответ

1

Если ваша цель состоит в том, чтобы хранить (Int, Node) кортежей в массиве, то вы должны заключить кортеж в скобках, либо при указании типа массива и при использовании append:

var test: Node = Node() 
var arrayTest = [(Int, Node)]() 
//    ^  ^

arrayTest.append((2, test)) 
//    ^ ^
0

И если в противном случае вы строите словарь, то это будет выглядеть примерно так:

var arrayTest = Dictionary<Int, Node>() 
arrayTest[2] = test 
1

добавляющим кортеж в массив работал, как и ожидалось, когда мой кортеж имел 2 элементов. Когда я прыгнул в кортеж с четырьмя элементами, я получил сообщение «Доступ к членам ...».

Простой подход не работает.

myArray.append(tupleItem1, tupleItem2, tupleItem3, tupleItem4) // ! Accessing members of protocol type value ... 

Предлагаемое обходное решение не работает.

myArray.append((tupleItem1, tupleItem2, tupleItem3, tupleItem4)) // ! Missing argument for parameter #2 in call 

Что сделало работу двухэтапным добавлением.

let myElement = (tupleItem1, tupleItem2, tupleItem3, tupleItem4) 
myArray.append(myElement)