Ответ 1
Вы не можете назначить строковое значение для bool, но вы можете проверить, что str1 равен нулю или не нравится следующим образом:
myBool = str1 != nil ? true : false
print(myBool)
Он будет печатать false, потому что str1 пуст.
Я хочу использовать необязательную переменную с тернарным условным оператором, но она выдает ошибку этой ошибке: необязательный не может использоваться как логический. Что я делаю неправильно?
var str1: String?
var myBool:Bool
myBool = str1 ? true : false
Вы не можете назначить строковое значение для bool, но вы можете проверить, что str1 равен нулю или не нравится следующим образом:
myBool = str1 != nil ? true : false
print(myBool)
Он будет печатать false, потому что str1 пуст.
Также может использоваться оператор коалесцирования Nil. В приведенном ниже коде используется тернарный условный оператор и принудительная разворачивание (a!) Для доступа к значению, заключенному внутри a, когда a не равно нулю, и для возврата b в противном случае
Обычный тернарный оператор:
output = a != nil ? a! : b
ссылка для разработчиков Apple: см. Демо-ссылка
В Swift 1.2 и 2 выше строка кода заменяется более коротким форматом:
output = a ?? b
Демо-ссылка: оператор объединения nil (a? b) разворачивает необязательный а, если он содержит значение, или возвращает значение по умолчанию b, если a равно нулю.
Это даже хорошо работает, если требуемое значение является свойством или результатом вызова функции по необязательной (в Swift 3.0):
return peripheral?.connected ?? false
Если сравнение основано на некотором условии
let sliderValue = Float(self.preferenceData.getLocationRadius().characters.count > 1 ?self.preferenceData.getLocationRadius():"0.1")
Здесь функция getLocationRadius() возвращает строку. Еще одна вещь, если мы не помещаем промежуток между 1 и? это приводит к ошибке синтаксиса