如何将“包裹”转换为“ CVarArg”?

我有一个应用程序,它处理大量需要以表格形式显示的可选数据

<Latest value formatted (units)> || "never updated"

所以显然我的代码充满了诸如此类的东西:

var pressureString: String {
    (self.lastData != nil) ?
        String(format: "%.2f kPa",self.lastData!.pressure.doubleValue)
        :
        Constants.neverupdated // NSLocalizedString
}

所以我决定尝试用以下方法整理一下:

var pressureString: String {
    (self.lastData?.pressure.doubleValue).format("%.2f kPa",or: Constants.neverupdated)
}

并将format写为:

extension Optional {
    func format(_ formatString: String,or: String) -> String {
        if let s = self {
            return String(format: formatString,s)
        } else {
            return or
        }
    }
}

但是,出现错误“参数类型'Wrapped'不符合预期的类型'CVarArg'”,并且在https://developer.apple.com/documentation/swift/cvararg查找文档时,我看到

  

声明已定义类型符合CVarArg协议   不支持标准库之外的内容。

...那么有什么 格式来格式化通用Wrapped

linian000 回答:如何将“包裹”转换为“ CVarArg”?

Swift 5

您可以编写一个扩展名--

extension Optional where Wrapped == CVarArg {

    func format(_ formatString: String,or: String) -> String {
        guard let self = self else { return or }
        return String(format: formatString,self)
    }
}
本文链接:https://www.f2er.com/3110746.html

大家都在问