如何将“包装的”转换为“ CVarArg`?

问题描述 投票:0回答:1

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

<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协议不支持标准库之外的内容。

...所以有any格式格式化通用Wrapped的方法吗?

swift optional
1个回答
0
投票

Swift 5

您可以编写扩展名,例如->

extension Optional where Wrapped == CVarArg {

    func format(_ formatString: String, or: String) -> String {
        if let self = self {
            return String(format: formatString, self)
        }
        else {
            return or
        }
     }
}
© www.soinside.com 2019 - 2024. All rights reserved.