当前位置: 首页 > 面试题库 >

带有args的Swift函数…传递给带有args的另一个函数

太叔航
2023-03-14
问题内容

我有一个简单的问题。我曾尝试在许多博客中搜索有关此问题的信息,但所有站点都返回了如何快速运行功能,但我需要这种情况。

我的自定义函数是:

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

如何通过args将args传递给其他系统函数?

谢谢前进。


问题答案:

与(Objective-)C中类似,您不能将变量参数列表直接传递给另一个函数。您必须创建一个CVaListPointer
(与va_listC语言中的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日, 如果您不在乎通知,则有一种更简洁的方法: 此处提供旧答案: 您可以持续不断地兑现承诺。