如何将 `Wrapped` 转换为 `CVarArg`?
How to convert `Wrapped` to `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
}
}
}
但是,我收到错误 "Argument type 'Wrapped' does not conform to expected type 'CVarArg'",在 https://developer.apple.com/documentation/swift/cvararg 查找文档时,我看到
Declaring conformance to the CVarArg protocol for types defined
outside the standard library is not supported.
...那么是否有 任何 格式化通用 Wrapped
的方法?
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)
}
}
我有一个应用程序可以处理大量需要以
形式显示的可选数据<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
}
}
}
但是,我收到错误 "Argument type 'Wrapped' does not conform to expected type 'CVarArg'",在 https://developer.apple.com/documentation/swift/cvararg 查找文档时,我看到
Declaring conformance to the CVarArg protocol for types defined outside the standard library is not supported.
...那么是否有 任何 格式化通用 Wrapped
的方法?
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)
}
}