ios - 在 Swift 4 中为 os_log 传递可变参数

标签 ios swift4 variadic

我正在尝试在 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 的拼写语法)

最佳答案

我还没有找到解决方案,所以做了这个愚蠢的 hack:

switch args.count {
case 0:
    os_log(message, log: log!, type: type)
case 1:
    os_log(message, log: log!, type: type, args[0])
case 2:
    os_log(message, log: log!, type: type, args[0], args[1])
case 3:
    os_log(message, log: log!, type: type, args[0], args[1], args[2])
default:
    os_log(message, log: log!, type: type, args)
}

关于ios - 在 Swift 4 中为 os_log 传递可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498121/

相关文章:

ios - 解析 - 设置设备 token

ios - swift 4.0 : Overriding 'prepare' must be as available as declaration it overrides

php - 如何为可变函数编写 Doxygen 注释,即具有未定义参数数量的函数?

c++ - 需要对 std::tuple(即 std::get<E>)进行非常量索引访问的 Eloquent 解决方案

c++ - 简单结构的可变参数模板示例

ios - NSDictionary 与 Swift 2 中的文件内容

iphone - 如何知道 View Controller 是否在堆栈中。如果它在堆栈中,则应将其弹出,否则应将其压入

ios - 带有圆角的 UIButton 的事件可点击区域?

arrays - 以逗号分隔列表的形式获取核心数据

ios - collectionView didSelectItemAtIndexPath 在迁移到 Xcode 10.2 后停止工作