Swift 的 ?? 运算符不支持这种类型不匹配的操作,确实,它无法决定当表达式两侧不共享同样的基础类型时,到底应该使用哪一个类型。不过,只是为了在字符串插值中使用可选值这一特殊目的的话,添加一个我们自己的运算符也很简单。让我们把它叫做 ???:
```
infix operator ???: NilCoalescingPrecedence
public func ???<T>(optional: T?, defaultValue: @autoclosure () -> String) -> String {
switch optional {
case let value?: return String(describing: value)
case nil: return defaultValue()
}
}
```
网友评论