Dzięki Swift 5 możesz zaimplementować Optionalrozszerzenie Stringtypu z właściwością logiczną, która zwraca, jeśli opcjonalny ciąg nie ma wartości lub jest pusty:
extension Optional where Wrapped == String {
var isNilOrEmpty: Bool {
return self?.isEmpty ?? true
}
}
Jednak Stringimplementuje isEmptywłaściwość zgodnie z protokołem Collection. Dlatego możemy zastąpić ogólne ograniczenie poprzednim kodzie'S ( Wrapped == String) z szerszym jeden ( Wrapped: Collection), dzięki czemu Array, Dictionarya Settakże korzystać z nowego isNilOrEmptywłaściwość:
extension Optional where Wrapped: Collection {
var isNilOrEmpty: Bool {
return self?.isEmpty ?? true
}
}
Użycie z Strings:
let optionalString: String? = nil
print(optionalString.isNilOrEmpty)
let optionalString: String? = ""
print(optionalString.isNilOrEmpty)
let optionalString: String? = "Hello"
print(optionalString.isNilOrEmpty)
Użycie z Arrays:
let optionalArray: Array<Int>? = nil
print(optionalArray.isNilOrEmpty)
let optionalArray: Array<Int>? = []
print(optionalArray.isNilOrEmpty)
let optionalArray: Array<Int>? = [10, 22, 3]
print(optionalArray.isNilOrEmpty)
Źródła: