元組只是分配給一個臨時變量:
let tuple = (
id: idInt,
name: nameString
)
arrayObj.append(tuple)
不知道爲什麼它不工作的方式 - 只需檢查上的功能,如:
var array: [(param1: Int, param2: String)] = []
func test(x: (param1: Int, param2: String)) {
println(x)
}
test((param1: 2, param2: "Test"))
array.append((param1: 2, param2: "Test"))
結果:函數有效,數組方法不。
更新:嘗試在操場下面的代碼:
struct Test<T> {
func doSomething(param: T) {
println(param)
}
}
var test = Test<(param1: Int, param2: String)>()
let tuple = (param1: 2, param2: "Test")
test.doSomething(tuple)
test.doSomething((param1: 2, param2: "Test"))
結果:經過tuple
變量時doSomething
它的工作原理 - 用文字代替元組沒有,儘管編譯器消息是不同的:
'((param1: Int, param2: String)) ->()' does not have a member named 'doSomething'
顯然傳遞一個字面元組到一個通用的類(其中,該元組是通用型)的方法,沒有正確地由編譯器處理。
更新#2:我反覆試了在非通用類,但使用一個通用的方法,在這種情況下,它的工作:
struct Test {
func doSomething<T>(param: T) {
println(param)
}
}
var test = Test()
let tuple = (param1: 2, param2: "Test")
test.doSomething(tuple)
test.doSomething((param1: 2, param2: "Test"))
所以它肯定與泛型類問題只要。
如果您使用'typealias'它的作品。看到我更新的答案。 – vacawama 2014-09-27 15:55:20