mono0926
12/5/2016 - 11:37 PM

string.swift

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