电话中的额外参数

时间:2018-06-13 07:05:43

标签: arrays swift string tuples

这里的简单问题。我该如何工作?我知道我可以单独做每一个,但是如何做到这一点而不会出现这个错误。

var zero = (prob: 0.2, label: "Dog")
var one = (prob: 0.3, label: "Cat")
var two = (prob: 0.2, label: "Fish")
Etc

var stringArray = Array<String>()

Func transfer(label: String) -> Array<Any> {
stringArray.append(label)
return stringArray

}

transfer(label: zero.1, one.1, two.1...etc)

2 个答案:

答案 0 :(得分:3)

您想要的是“Variadic Parameters”。在String参数类型后添加三个点。例如

func transfer(labels: String...) -> [String] {
   return labels
}
// you can now call
transfer(labels: zero.1, one.1, two.1)

如果您只想将数据包中的字符串包装起来,那么您最好使用数组文字

var labels = [zero.1, one.1, two.1]

您还可以将元组转换为像这样的字符串数组

func transfer(tuples: (Double,String)...) -> [String] {
   return tuples.map {$0.1} // which is a shorthand for {tuple in tuple.1}
}
transfer(tuples: zero, one, two, three)

答案 1 :(得分:0)

此错误是因为您传递的错误如下所示:transfer(label:)调用的“额外参数”,正如您所定义的那样,只接收一个参数。将其更改为:

var zero = (prob: 0.2, label: "Dog")
var one = (prob: 0.3, label: "Cat")
var two = (prob: 0.2, label: "Fish")

var stringArray = [String]()

func transfer(label: String) -> [String] {
    stringArray.append(label)
    return stringArray
}

transfer(label: zero.1)
transfer(label: one.1)
transfer(label: two.1)

你也可以这样做:

var zero = (prob: 0.2, label: "Dog")
var one = (prob: 0.3, label: "Cat")
var two = (prob: 0.2, label: "Fish")

var stringArray = [ zero.1, one.1, two.1 ]

它产生相同的输出。