2014-07-02 17 views
9

sto cercando di creare un array di tuple a Swift, ma con grande difficoltà:Come si crea un array di tuple?

var fun: (num1: Int, num2: Int)[] = (num1: Int, num2: Int)[]() 

È possibile che questo causa un errore di compilazione.

Perché è sbagliato? Le seguenti funzioni correttamente:

var foo: Int[] = Int[]() 
+0

possibile duplicato di [Array di tuple a Swift] (http: // StackOverflow. it/questions/24210692/array-of-tuples-in-swift) – Rivera

risposta

19

Funziona con un tipo alias:

typealias mytuple = (num1: Int, num2: Int) 

var fun: mytuple[] = mytuple[]() 
// Or just: var fun = mytuple[]() 
fun.append((1,2)) 
fun.append((3,4)) 

println(fun) 
// [(1, 2), (3, 4)] 

Aggiornamento: Al Xcode 6 Beta 3, la sintassi dell'array è cambiato:

var fun: [mytuple] = [mytuple]() 
// Or just: var fun = [mytuple]() 
+0

Questo è cambiato per Swift - Beta 3. – vacawama

+0

@vacawama: hai ragione (ma la vecchia sintassi funziona ancora, causando solo un avvertimento del compilatore). Ho aggiornato la risposta di conseguenza. Grazie per il feedback. –

6

Puoi farlo, solo il tuo compito è eccessivamente complicato:

var tupleArray: [(num1: Int, num2: Int)] = [ (21, 23) ] 

o per fissare un vuoto uno:

var tupleArray: [(num1: Int, num2: Int)] = [] 
tupleArray += (1, 2) 
println(tupleArray[0].num1) // prints 1 
+0

Hai ragione! 'var tupleArray: (num1: Int, num2: Int) [] = []' funziona correttamente. –

+0

Sì, le tuple e gli array sono seriamente eccentrici. Questo Q & A ha più stranezze: http://stackoverflow.com/questions/24210692/array-of-tuples-in-swift –

+0

Questo è cambiato per Swift - Beta 3. – vacawama

2

Questo funziona anche:

var fun:Array<(Int,Int)> = [] 
fun += (1,2) 
fun += (3,4) 

Stranamente, però, append vuole un solo set di parentesi:

fun.append(5,6) 

Se si desidera che il etichette per le parti tuple:

var fun:Array<(num1: Int, num2: Int)> = [] 
fun += (1,2)     // This still works 
fun.append(3,4)    // This does not work 
fun.append(num1: 3, num2: 4) // but this does work 
+0

Questo è un bug/funzionalità in Swift con matrici di tuple. Maggiori informazioni qui: http://stackoverflow.com/questions/24210692/array-of-tuples-in-swift –

0

Non sei sicuro di versioni precedenti di Swift, ma questo funziona in Swift 3 quando si desidera fornire valori iniziali:

var values: [(num1: Int, num2: Int)] = { 
    var values = [(num1: Int, num2: Int)]() 
    for i in 0..<10 { 
     values.append((num1: 0, num2: 0)) 
    } 
    return values 
}()