扩展Optional
返回一个String
从 Swift 3 开始,您不能直接将扩展方法限制为可选的String
. 正如 Daniel Shin 的回答所解释的那样,您可以使用协议获得等效的结果。
但是,您可以在任何类型的 Optional 上创建扩展方法,并且我发现了一些具有String
返回值的有用方法。这些扩展有助于将值记录到控制台。String
当我想用空字符串替换一个可能的 nil 时,我在一个可选项上使用了 asStringOrEmpty() 。
extension Optional {
func asStringOrEmpty() -> String {
switch self {
case .some(let value):
return String(describing: value)
case _:
return ""
}
}
func asStringOrNilText() -> String {
switch self {
case .some(let value):
return String(describing: value)
case _:
return "(nil)"
}
}
}
使用示例:
var booleanValue: Bool?
var stringValue: String?
var intValue: Int?
print("booleanValue: \(booleanValue.asStringOrNilText())")
print("stringValue: \(stringValue.asStringOrNilText())")
print("intValue: \(intValue.asStringOrNilText())")
booleanValue = true
stringValue = "text!"
intValue = 41
print("booleanValue: \(booleanValue.asStringOrNilText())")
print("stringValue: \(stringValue.asStringOrNilText())")
print("intValue: \(intValue.asStringOrNilText())")
控制台输出:
booleanValue: (nil)
stringValue: (nil)
intValue: (nil)
booleanValue: true
stringValue: text!
intValue: 41
Optional
不同于零指针
这些扩展说明 anOptional
与 nil 指针不同。AnOptional
是enum
指定类型 ( Wrapped
) 的 a,表示它包含或不包含值。您可以在“容器”上编写扩展名,Optional
即使它可能不包含值。
Swift 可选声明的节选
enum Optional<Wrapped> : ExpressibleByNilLiteral {
/// The absence of a value.
case none
/// The presence of a value, stored as `Wrapped`.
case some(Wrapped)
...
}
在代码中,缺少值通常是使用nil
文字而不是显式.none
枚举情况来编写的。