Так как мне надоело вручную нилитировать необязательные значения, я решил превратить общие значения по умолчанию в удобные и простые в использовании расширения в Optional, как показано ниже:
public extension Optional {
var exists: Bool { return self != nil }
}
public extension Optional where Wrapped == String {
var orEmpty: Wrapped { return self ?? "" }
}
public extension Optional where Wrapped == Int {
var orZero: Wrapped { return self ?? 0 }
}
public extension Optional where Wrapped == Double {
var orZero: Wrapped { return self ?? 0 }
}
public extension Optional where Wrapped == Float {
var orZero: Wrapped { return self ?? 0 }
}
public extension Optional where Wrapped == Bool {
var orFalse: Wrapped { return self ?? false }
}
Моя проблема возникает при попытке использовать их для необязательного значения определенного типа.
Я могу вызвать .orZero
для переменной типа String?
и получить одну из следующих ошибок:
Неоднозначная ссылка на члена 'orZero'
'String?'не конвертируется в 'Optional'
Я хотел бы знать, почему XCode предоставляет свойства .orZero
такого необязательного параметра, как допустимые параметры автозаполнения?Я бы подумал, что общие ограничения помешают мне их увидеть.
Для чего бы то ни было, я использую Xcode 10.1 и Swift 4.2