2015-04-01 131 views
10

我有一个简单的问题。我试过在很多博客中搜索这个问题,但是所有的网站都会在快速工作中返回函数,但我需要这种情况。带参数的快捷函数...传递给带参数的另一个函数

我的自定义函数是:

func getLocalizeWithParams(args:CVarArgType...)->String { 
    return NSString.localizedStringWithFormat(self, args); //error: Expected expression in list of expressions 
} 

我怎么做我的ARGS通过与其他ARGS系统功能?

感谢提前。

+0

[传递的阵列,以与夫特ARGS的可变数量的函数的可能重复](http://stackoverflow.com/questions/24024376/passing-an-array-to-a-function-with-variable-number-of-args-in-swift) – newacct 2015-04-02 01:20:44

+0

我看到这篇文章,但它didn'解决我的问题。 – ViTUu 2015-04-02 01:23:56

+0

这个如何:http://stackoverflow.com/questions/24110853/passing-in-variable-number-of-args-from-one-function-to-another-in-swift这是完全一样的问题。它被标记为上述的一个副本;这就是我使用那个的原因。 – newacct 2015-04-02 07:27:13

回答

15

类似的(Objective- )C,不能将可变参数列表 直接传递给另一个函数。您必须创建一个CVaListPointer (C中的Swift等效项va_list),并调用一个函数,其中 需要参数CVaListPointer

因此,这可能是你在找什么:

extension String { 
    func getLocalizeWithParams(args : CVarArgType...) -> String { 
     return withVaList(args) { 
      NSString(format: self, locale: NSLocale.currentLocale(), arguments: $0) 
     } as String 
    } 
} 

withVaList()创建从给定的参数列表 一个CVaListPointer并调用该指针作为参数关闭。

实施例(从NSString文档):

let msg = "%@: %f\n".getLocalizeWithParams("Cost", 1234.56) 
print(msg) 

输出,用于美国的区域设置:

Cost: 1,234.560000 

输出为德语区域:

Cost: 1.234,560000 

更新:作为夫特3/4一个可以传递的参数

String(format: String, locale: Locale?, arguments: [CVarArg]) 

直接:

+0

它对我工作正常..谢谢 – ViTUu 2015-04-02 01:23:29

+0

我研究了关于va_list,但我没有搜索任何关于它在swift ... – ViTUu 2015-04-02 01:27:08

+0

这不能正确转换本地化的字符串。 – 2015-11-18 21:20:51

0

我相信你错误地使用了NSString.localizedStringWithFormat(self, args)。否则使用args来调用另一个函数没有错。

如果你看看下面,你需要指定格式的NSString作为第一个参数: NSString.localizedStringWithFormat(format: NSString, args: CVarArgType...)

这太问题解释了如何使用它在斯威夫特:iOS Swift and localizedStringWithFormat

+0

谢谢,但我知道如何工作localizedStringWithFormat,我需要知道如何传递args ... PARAMS到另一个函数像localizedStringWithFormat参数...明白吗?翻译我的英语 – ViTUu 2015-04-01 20:40:26

+0

当您将参数传递给getLocalizeWithParams()时,您可以将该参数用于该函数内的任何函数调用。没有错。 – anasimtiaz 2015-04-01 20:57:54

+0

参数**在** getLocalizeWithParams()**是一个_Array_,我的数组可以包含** n **项,因为这需要传递给** NSString.localizedStringWithFormat ** a ** n **值,并且当我尝试这种方式我这样做,它通过一个数组不是很多值** NSString.localizedStringWithFormat ** – ViTUu 2015-04-01 21:01:12