我正在尝试为
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的splatting语法)
解决方法
我还没有找到解决方案,所以这个愚蠢的黑客:
switch args.count { case 0: os_log(message,log: log!,type: type) case 1: os_log(message,type: type,args[0]) case 2: os_log(message,args[0],args[1]) case 3: os_log(message,args[1],args[2]) default: os_log(message,args) }