我搜索谷歌,但我找不到一种方法将新元素追加到Swift中的数组对象。 出现错误代码“Missing arguments fot parameter”name“in call”。 我的代码被遵循。
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
))
如果你知道任何解决办法,我会很高兴的。
感谢。
答案 0 :(得分:10)
更有趣的解决方法:
arrayObj += [(id: idInt, name: nameString)]
和
arrayObj.append([(id: idInt, name: nameString)][0])
奇怪的是,如果你使用typealias
:
typealias MyData = (id: Int, name: String)
var arrayObj: [MyData] = []
var idInt: Int = 1
var nameString: String = "hoge"
arrayObj.append((id: idInt, name: nameString))
修改强>
还有一个解决方法:
arrayObj.insert((id: idInt, name: nameString), atIndex:index)
答案 1 :(得分:8)
只需将元组分配给临时变量:
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"))
所以这肯定是一个只与泛型类相关的问题。
答案 2 :(得分:7)
我只想澄清一些事情:
如果您有一个带有命名元素的元组数组,就像在答案中一样,您可以使用下面描述的语法向元素添加元素:
arrayObj.append(id: 1, name: "TestName")
如果您的元组数组没有命名元素,请执行以下操作:
var arrayObj: [(Int, String)] = []
使用它:
arrayObj.append(1, "TestName")
如果您为元组创建了 typealias ,则可以使用元组语法将元素添加到列表中:
typealias MyTuple = (Int, String)
var arrayObj: [MyTuple] = []
arrayObj.append((1, "TestName"))