【发布时间】:2018-11-20 11:09:26
【问题描述】:
因此,因为我厌倦了必须手动 nil-coalesce 可选值,所以我决定将常见的默认值转换为 Optional 上漂亮且易于使用的扩展,如下所示:
public extension Optional {
var exists: Bool { return self != nil }
}
public extension Optional where Wrapped == String {
var orEmpty: Wrapped { return self ?? "" }
}
public extension Optional where Wrapped == Int {
var orZero: Wrapped { return self ?? 0 }
}
public extension Optional where Wrapped == Double {
var orZero: Wrapped { return self ?? 0 }
}
public extension Optional where Wrapped == Float {
var orZero: Wrapped { return self ?? 0 }
}
public extension Optional where Wrapped == Bool {
var orFalse: Wrapped { return self ?? false }
}
我的问题是在尝试对具有特定类型的可选值使用这些时出现的。
我可以在 String? 类型的变量上调用 .orZero 并得到以下错误之一:
对成员“orZero”的模糊引用
'细绳?'不能转换为“可选”
我想知道为什么 Xcode 会提供 .orZero 属性作为可选的有效自动完成选项?我原以为通用约束会阻止我看到它们。
不管怎样,我使用的是 Xcode 10.1 和 Swift 4.2
【问题讨论】: