如何在Swift代码中将元组追加到数组对象?

时间:2014-09-27 15:30:50

标签: swift xcode6

我搜索谷歌,但我找不到一种方法将新元素追加到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
))
如果你知道任何解决办法,我会很高兴的。 感谢。

3 个答案:

答案 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"))