Дополнительные аргументы в вызове - PullRequest
0 голосов
/ 13 июня 2018

Простой вопрос здесь.Как мне сделать эту работу?Я знаю, что мог бы делать каждый по отдельности, но как я это делаю, не получая эту ошибку.

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 голосов
/ 13 июня 2018

То, что вы хотите, называется « 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)
0 голосов
/ 13 июня 2018

Эта ошибка вызвана тем, что вы передаете, как в сообщении об ошибке: «Дополнительные аргументы» к вызову 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 ]

Он выдает тот же результат.

...