我有一个简单的问题。我曾尝试在许多博客中搜索有关此问题的信息,但所有站点都返回了如何快速运行功能,但我需要这种情况。
我的自定义函数是:
func getLocalizeWithParams(args:CVarArgType...)->String {
return NSString.localizedStringWithFormat(self, args); //error: Expected expression in list of expressions
}
如何通过args将args传递给其他系统函数?
谢谢前进。
与(Objective-)C中类似,您不能将变量参数列表直接传递给另一个函数。您必须创建一个CVaListPointer
(与va_list
C语言中的Swift等效)并调用一个带有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
更新: 从 Swift 3/4/5开始, 可以将参数传递给
String(format: String, locale: Locale?, arguments: [CVarArg])
直:
extension String {
func getLocalizeWithParams(_ args : CVarArg...) -> String {
return String(format: self, locale: .current, arguments: args)
}
}
问题内容: 在Swift编程语言中,它说: 函数也可以采用可变数量的参数,将它们收集到一个数组中。 当我用逗号分隔的数字列表(`sumOf(1、2、3、4)调用这样的函数时,它们可以作为函数内部的数组使用。 问题:如果我已经有一个要传递给该函数的数字数组怎么办? 这将因编译器错误而失败,即“找不到接受提供的参数的’__conversion’的重载”。有没有办法将现有数组转换为可以传递给可变参数函数
问题内容: 我想将传递给function()的所有参数作为参数传递给内部的另一个function(), 这可以在被调用过程中完成并将它们传递给,但是还有另一种方法吗? 本来 但是如果我的func1签名是 我如何将它们全部发送到func2,而不使用 有没有一种方法像在javascript中? 问题答案: 显式比隐式更好, 但是如果您真的不想键入一些字符,请执行以下操作: 都是局部变量,因此您不能在调
让我们假设下面的方法(从番石榴的Iterables说): 这个系列: 然后编译以下代码并正确导出泛型 (在Guava中,这将返回< code>objs中所有字符串的iterable。) 但是现在让我们假设以下类: 我不知道如何调用并获取
问题内容: docker-compose.yml: Dockerfile: 结果是: 我ing不休,为什么这不起作用。如果更改节点版本号,则该数字也会更改。 问题答案: 在compose文件上定义的参数在Dockerfile上可用,但仅在之前和之上可用。在参数不可用之后: 在a之前的声明位于构建阶段之外,因此不能在以后的任何指令中使用它。- 来自docker docs 为什么论点起作用? 。之后的
问题内容: 我正在尝试与Swift的旧C终端应用程序进行交互。我已经成功集成了源代码,并将标头从C桥接到Swift。该代码从Xcode 6.3 beta编译并运行。我已将终端应用程序的主要入口点重命名为: 不过,我正在努力将Swift的参数传递给此C函数。我的挑战是将参数转换为正确的格式。Swift的典型输入如下所示: 我试过弄乱“ cStringUsingEncoding(NSUTF8Strin
问题内容: 我正在尝试将AngularJS promise / then与递归函数一起使用。但是未调用then函数(错误,成功,通知回调均未调用)。 这是我的代码: 递归函数 然后 我认为,那时至少必须获得第一个通知回调。但是没有回调。然后不使用递归函数吗? 问题答案: 编辑-2015年11月11日, 如果您不在乎通知,则有一种更简洁的方法: 此处提供旧答案: 您可以持续不断地兑现承诺。