【发布时间】:2017-09-29 23:34:58
【问题描述】:
我正在尝试在 Swift 4 / iOS 11 中为 os_log 编写一个方便的包装器,但是我在传递可变参数方面遇到了一场艰苦的战斗。
基本上,我想编写一个如下所示的函数。
static let logger = OSLog(subsystem: "com.example.foo", category: "foobar")
func logError(_ message: StaticString, _ args: Any...) {
os_log(message, log: logger, type: .error, args)
}
不幸的是,我似乎无法弄清楚传递参数的神奇语法,并且在 CVarArg 讨论的泥潭中迷失了方向。
(...这让我想念 Python 的飞溅语法)
【问题讨论】:
-
在不了解 os_log API 的情况下,您可能正在寻找
withVaList? -
尝试使用VaList 失败:-( 供参考,os_log 签名为
func os_log(_ message: StaticString, dso: UnsafeRawPointer? = #dsohandle, log: OSLog = default, type: OSLogType = default, _ args: CVarArg...) -
将可变参数传递给另一个可变参数调用没有神奇的语法。
-
我不确定您是否可以将数组传递给
...参数。在任何情况下,您的函数的 arg 类型都需要匹配(即使用 CVarArg 而不是 Any) -
经过几个小时的搜索,我怀疑@KevinBallard 是正确的。不过,我仍然希望有人在星期一之前为我提供一些神奇的语法,这样我就可以继续我的下一个任务了。