Быстрое inline условное?
Как это сделать в Swift?
(someboolexpression ? "Return value 1" : "Return value 2")
(нет, я еще не прочитал все руководство... Я, вероятно, пропустил его на странице 2!)
ОК, поэтому его на стр. 91 и выше отображаются правильно. Однако я пытаюсь использовать это в строке следующим образом:
println(" some string \(some expression ? "Return value 1" : "Return value 2")"
но компилятор не доволен. Любая идея, если это возможно?
Это так близко, что я смог получить
let exists = "exists"
let doesnotexist= "does not exist"
println(" something \(fileExists ? exists : doesnotexist)")
Ответы
Ответ 1
Если вы ищете один лайнер для этого, вы можете вывести операцию ?:
из интерполяции строк и объединить с помощью +
вместо:
let fileExists = false // for example
println("something " + (fileExists ? "exists" : "does not exist"))
Выходы:
что-то не существует
Ответ 2
var firstBool = true
var secondBool: Bool
firstBool == true ? (secondBool = true) : (secondBool = false)
Если в этом случае он изменяет secondBool на то, что имеет первыйBool. Вы можете сделать это с помощью целых чисел и строк.
Ответ 3
Вы можете использовать новый оператор Nil-Coalescing, поскольку Swift 3, если вам нужно просто установить значение по умолчанию в случае if
:
let someValue = someOptional ?? ""
Если if someOptional
false, этот оператор присваивает ""
someValue
Ответ 4
Ты был так близко. Просто нужно присвоить его переменной:
self.automaticOption = (automaticOptionOfCar ? "Automatic" : "Manual")
Edit:
Любая идея, почему это же выражение не может быть встроено в строку?
Вы можете сделать это:
let a = true
let b = 1
let c = 2
println("\(a ? 1: 2)")
Ответ 5
Ну,
Если вы соедините условное с строкой с помощью оператора +, она должна работать.
Поэтому Майк прав.
var str = "Something = " + (1 == 1 ? "Yes" : "No")
Ответ 6
Он называется " тернарный оператор".
Что касается ответа @Esqarrouth, я думаю, что лучшим форматом будет:
Swift 3:
var firstBool = true
var secondBool: Bool
secondBool = firstBool ? true : false
Это то же самое, что:
var firstBool = true
var secondBool: Bool
if (firstBool == true) {
secondBool = true
} else {
secondBool = false
}
Ответ 7
простое решение, которое я использовал в своих проектах
Swift 3 +
var retunString = (state == "OFF") ? "securityOn" : "securityOff"
Ответ 8
Я использую inline условно:
isFavorite возвращает Boolen
favoriteButton.tintColor = CoreDataManager.sharedInstance.isFavorite(placeId: place.id, type: 0) ? UIColor.white : UIColor.clear
tourOperatorsButton.isHidden = place.operators.count != 0 ? true : false