我搜索了google,但找不到在Swift中将新元素追加到数组对象的方法。出现错误代码“呼叫中参数“名称”缺少参数”。遵循我的代码。
var arrayObj: [(id: Int, name: String)] = [] var idInt: Int = 1 var nameString: String = "hoge" arrayObj.append(( // ----> "Missing arguments fot parameter "name" in call" id: idInt, name: nameString ))
如果您知道任何解决方案,我将非常高兴。谢谢。
只需将元组分配给temp变量:
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-使用文字元组时,它不起作用,尽管编译器消息不同:
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"))
因此,这绝对是仅与泛型类有关的问题。