Подтвердить что ты не робот

Как использовать необязательную переменную в тернарном условном операторе?

Я хочу использовать необязательную переменную с тернарным условным оператором, но она выдает ошибку этой ошибке: необязательный не может использоваться как логический. Что я делаю неправильно?

var str1: String?
var myBool:Bool
myBool = str1 ? true : false
4b9b3361

Ответ 1

Вы не можете назначить строковое значение для bool, но вы можете проверить, что str1 равен нулю или не нравится следующим образом:

myBool = str1 != nil ? true : false
print(myBool)

Он будет печатать false, потому что str1 пуст.

Ответ 2

Также может использоваться оператор коалесцирования Nil. В приведенном ниже коде используется тернарный условный оператор и принудительная разворачивание (a!) Для доступа к значению, заключенному внутри a, когда a не равно нулю, и для возврата b в противном случае

Обычный тернарный оператор:

output = a != nil ? a! : b ссылка для разработчиков Apple: см. Демо-ссылка

В Swift 1.2 и 2 выше строка кода заменяется более коротким форматом:

output = a ?? b

Демо-ссылка: оператор объединения nil (a? b) разворачивает необязательный а, если он содержит значение, или возвращает значение по умолчанию b, если a равно нулю.

Ответ 3

Это даже хорошо работает, если требуемое значение является свойством или результатом вызова функции по необязательной (в Swift 3.0):

return peripheral?.connected ?? false

Ответ 4

Если сравнение основано на некотором условии

 let sliderValue = Float(self.preferenceData.getLocationRadius().characters.count > 1 ?self.preferenceData.getLocationRadius():"0.1")

Здесь функция getLocationRadius() возвращает строку. Еще одна вещь, если мы не помещаем промежуток между 1 и? это приводит к ошибке синтаксиса