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