Swift функция с args ... перейти к другой функции с args
У меня есть простая проблема. Я пробовал поиск во многих блогах по этому вопросу, но все сайты возвращают функцию в swift, но мне нужен этот случай.
моя пользовательская функция:
func getLocalizeWithParams(args:CVarArgType...)->String {
return NSString.localizedStringWithFormat(self, args); //error: Expected expression in list of expressions
}
Как передать мои args в другую системную функцию с args?
спасибо заранее.
2 ответов
подобно как в (Objective -) C, вы не можете передать список переменных аргументов
непосредственно к другой функции. Вы должны создать CVaListPointer
(быстрый эквивалент va_list
в C) и вызовите функцию, которая
берет )
} as String
}
}
withVaList()
создает CVaListPointer
из данного списка аргументов
и вызывает закрытие с этим указателем в качестве аргумента.
пример (с NSString
документация):
let msg = "%@: %f\n".getLocalizeWithParams("Cost", 1234.56)
print(msg)
выход для нас locale:
Cost: 1,234.560000
вывод для немецкого языка:
Cost: 1.234,560000
обновление: по состоянию на Свифт 3/4 можно передать аргументы в
String(format: String, locale: Locale?, arguments: [CVarArg])
напрямую:
extension String {
func getLocalizeWithParams(_ args : CVarArg...) -> String {
return String(format: self, locale: .current, arguments: args)
}
}
Я считаю, что вы используете NSString.localizedStringWithFormat(self, args)
неправильно. В противном случае нет ничего плохого в использовании args для вызова другой функции.
Если вы посмотрите ниже, вам нужно указать формат как NSString в качестве первого аргумента:
NSString.localizedStringWithFormat(format: NSString, args: CVarArgType...)
этот вопрос SO объясняет, как использовать его в Swift:iOS Swift и localizedStringWithFormat