В Swift 5 вы можете реализовать Optional
расширение для String
типа с помощью логического свойства, которое возвращается, если необязательная строка не имеет значения или пуста:
extension Optional where Wrapped == String {
var isNilOrEmpty: Bool {
return self?.isEmpty ?? true
}
}
Однако String
реализует isEmpty
свойство в соответствии с протоколом Collection
. Поэтому мы можем заменить родовое ограничение предыдущего кода ( в Wrapped == String
) с более широким (один Wrapped: Collection
) , так что Array
, Dictionary
а Set
также воспользоваться нашим новым isNilOrEmpty
свойством:
extension Optional where Wrapped: Collection {
var isNilOrEmpty: Bool {
return self?.isEmpty ?? true
}
}
Использование с String
s:
let optionalString: String? = nil
print(optionalString.isNilOrEmpty) // prints: true
let optionalString: String? = ""
print(optionalString.isNilOrEmpty) // prints: true
let optionalString: String? = "Hello"
print(optionalString.isNilOrEmpty) // prints: false
Использование с Array
s:
let optionalArray: Array<Int>? = nil
print(optionalArray.isNilOrEmpty) // prints: true
let optionalArray: Array<Int>? = []
print(optionalArray.isNilOrEmpty) // prints: true
let optionalArray: Array<Int>? = [10, 22, 3]
print(optionalArray.isNilOrEmpty) // prints: false
Источники: