Я знаю, что могу вызывать печать напрямую, но зачем передавать элементы другой функции, чтобы она была как бы обернута массивом? Я хочу знать, почему и как это исправить
func test(items:Any...) {
print(items)
}
test(1,2,3) // print [1,2,3]
print(1, 2,3) // print 1 2 3
Как заставить тестовую функцию работать как функция печати?
3 ответа
Наконец, я завершаю тест следующим образом:
func test( items:Any...) {
for num in items {
print("\(num) ", separator:" ", terminator:"")
}
print("")
}
И это отлично работает, но есть ли лучшие решения?
Если вы хотите, чтобы test
выполнял то же самое, что и print
, почему бы просто не позвонить print
?
func test(args: Any...) {
print(args)
}
Если вам не разрешено / вы не хотите использовать этот небольшой трюк, вы можете попробовать это. Но это работает только с CustomStringConvertible
:
func test(args: CustomStringConvertible...) {
print(args.map {
$0.description
}.joinWithSeparator(" "))
}
РЕДАКТИРОВАТЬ: Ах, я не понял ваш вопрос. Swift не написан на Swift, поэтому вы не всегда можете определять функцию таким же образом. Из документации ...
Значения, передаваемые параметру с переменным числом аргументов, становятся доступными в теле функции в виде массива соответствующего типа.
Если вы передадите массив для печати, вы получите тот же эффект, что и с функцией Swift. т.е.
print(1, 2, 3) - prints 1 2 3
print([1, 2, 3]) - prints [1, 2, 3]
Кроме того, следующее печатает «Массив <Любой>».
func printIt(_ args: Any...) {
print(type(of: args))
}
Поскольку в Swift единственный выбор для определения функции с переменными аргументами - «...», я понимаю, что это означает, что вы не можете определить функцию таким же образом, как print. Поэтому ваш единственный выбор, если вам нужен тот же результат, - это смоделировать его, преобразовав массив в строку, соединенную пробелами. Ваш вопрос теоретический или у вас есть конкретная цель?
========
Я не уверен, что понимаю ваш вопрос, так как работает следующее:
func printIt(args: Any...) {
print(args)
}
printIt(args: 1, 2, 3)
В качестве альтернативы, если вы не хотите передавать имя параметра:
func printIt(_ args: Any...) {
print(args)
}
printIt(1, 2, 3)
Похожие вопросы
Связанные вопросы
Новые вопросы
swift
Swift — это язык программирования общего назначения, разработанный Apple Inc., впервые выпущенный в 2014 году для своих платформ и Linux. Swift имеет открытый исходный код. Используйте тег только для вопросов о языковых функциях или необходимости кода в Swift. Используйте теги [ios], [ipados], [macos], [watch-os], [tvos], [swiftui], [cocoa-touch] и [cocoa] для (не зависящих от языка) вопросов о платформах или рамки.