2014-07-02 3 views
9

मैं स्विफ्ट में tuples की एक सरणी बनाने के लिए कोशिश कर रहा हूँ, लेकिन महान कठिनाई हो रही:मैं tuples की सरणी कैसे बना सकता हूं?

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

ऊपर एक संकलक त्रुटि होती है।

यह गलत क्यों है? सही ढंग से निम्न काम करता है:

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

[स्विफ्ट में tuples के सरणी] (http के संभावित डुप्लिकेट। कॉम/प्रश्न/24210692/सरणी-ऑफ-टुपल्स-इन-स्विफ्ट) – Rivera

उत्तर

19

यह एक प्रकार उर्फ ​​साथ काम करता है:

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)] 

अद्यतन: Xcode 6 बीटा 3 के रूप में, सरणी वाक्य विन्यास बदल गया:

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

यह स्विफ्ट - बीटा 3 के लिए बदल गया है। – vacawama

+0

@ वाकावामा: आप सही हैं (लेकिन पुराना वाक्यविन्यास अभी भी काम करता है, केवल एक कंपाइलर चेतावनी का कारण बनता है)। मैंने तदनुसार जवाब अपडेट किया है। प्रतिक्रिया के लिए धन्यवाद। –

6

आप यह कर सकते हैं, बस आपका असाइनमेंट अत्यधिक जटिल है:

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

या एक खाली एक बनाने के लिए:

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

आप सही हैं! 'var tupleArray: (num1: int, num2: int) [] = [] 'बस काम करता है। –

+0

हाँ, tuples और arrays गंभीरता से quirky हैं। इस क्यू एंड ए में अधिक अजीबता है: http://stackoverflow.com/questions/24210692/array-of-tuples-in-swift –

+0

यह स्विफ्ट - बीटा 3 के लिए बदल गया है। – vacawama

2

यह भी काम करता है:

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

अजीब तरह हालांकि, append कोष्ठक का केवल एक सेट चाहता है:

fun.append(5,6) 

यदि आप चाहते हैं 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

यह स्विफ्ट में एक बग/फीचर है जो टुपल्स के सरणी के साथ है। यहां और अधिक: http://stackoverflow.com/questions/24210692/array-of-tuples-in-wift –

0

स्विफ्ट के पुराने संस्करणों के बारे में सुनिश्चित नहीं हैं, लेकिन इस स्विफ्ट 3 में काम करता है जब आप प्रारंभिक मान प्रदान करना चाहते हैं: // stackoverflow:

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 
}() 
संबंधित मुद्दे