В 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
}
}
Использование с Strings:
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
Использование с Arrays:
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
Источники: