我搜索谷歌,但我找不到一种方法将新元素追加到Swift中的数组对象.出现错误代码"Missing arguments fot parameter"name in 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
))
Run Code Online (Sandbox Code Playgroud)
如果你知道任何解决方案,我会很高兴.谢谢.
vac*_*ama 10
更有趣的解决方法:
arrayObj += [(id: idInt, name: nameString)]
Run Code Online (Sandbox Code Playgroud)
和
arrayObj.append([(id: idInt, name: nameString)][0])
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果你使用typealias:
typealias MyData = (id: Int, name: String)
var arrayObj: [MyData] = []
var idInt: Int = 1
var nameString: String = "hoge"
arrayObj.append((id: idInt, name: nameString))
Run Code Online (Sandbox Code Playgroud)
编辑:
还有一个解决方法:
arrayObj.insert((id: idInt, name: nameString), atIndex:index)
Run Code Online (Sandbox Code Playgroud)
只需将元组分配给临时变量:
let tuple = (
id: idInt,
name: nameString
)
arrayObj.append(tuple)
Run Code Online (Sandbox Code Playgroud)
不确定为什么它不起作用 - 只需检查一个函数,如下所示:
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"))
Run Code Online (Sandbox Code Playgroud)
结果:该函数有效,数组方法没有.
更新:在游乐场中尝试此代码:
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"))
Run Code Online (Sandbox Code Playgroud)
结果:它在传递tuple变量时起作用doSomething- 使用文字元组而不是,尽管编译器消息不同:
'((param1: Int, param2: String)) ->()' does not have a member named 'doSomething'
Run Code Online (Sandbox Code Playgroud)
显然,将文字元组传递给泛型类的方法(其中元组是泛型类型)未被编译器正确处理.
更新#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"))
Run Code Online (Sandbox Code Playgroud)
所以它绝对是一个只与泛型类相关的问题.
我只想澄清一些事情:
如果您有一个带有命名元素的元组数组,就像在答案中一样,您可以使用下面描述的语法将元素添加到数组中:
arrayObj.append(id: 1, name: "TestName")
Run Code Online (Sandbox Code Playgroud)
如果你有一个没有命名元素的元组数组,如下所示:
var arrayObj: [(Int, String)] = []
Run Code Online (Sandbox Code Playgroud)
用这个:
arrayObj.append(1, "TestName")
Run Code Online (Sandbox Code Playgroud)
如果您为元组创建了一个typealias,则可以使用元组语法将元素添加到列表中:
typealias MyTuple = (Int, String)
var arrayObj: [MyTuple] = []
arrayObj.append((1, "TestName"))
Run Code Online (Sandbox Code Playgroud)