public protocol OptionalWrapper {
associatedtype Wrapped
var wrapped: Wrapped? { get }
}
extension Optional: OptionalWrapper {
public var wrapped: Wrapped? {
return self
}
}
protocol StringProtocol {
var value: String { get }
}
extension String: StringProtocol {
var value: String { return self }
}
extension Optional where Wrapped: StringProtocol {
var getOrDefault: String {
return ""
}
var isNilOrEmpty: Bool {
return wrapped?.value.isEmpty ?? true
}
}
var s: String? = nil
s.getOrDefault // ""
s.isNilOrEmpty // true
// これのがむしろ分かりやすい?
s ?? ""
s?.isEmpty ?? true
s = "( ´・‿・`)"
s.getOrDefault // ( ´・‿・`)
s.isNilOrEmpty // false
// これのがむしろ分かりやすい?
s ?? ""
s?.isEmpty ?? true