一尘不染

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

swift

我搜索了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
))

如果您知道任何解决方案,我将非常高兴。谢谢。


阅读 296

收藏
2020-07-07

共1个答案

一尘不染

只需将元组分配给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-使用文字元组时,它不起作用,尽管编译器消息不同:

'((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"))

因此,这绝对是仅与泛型类有关的问题。

2020-07-07