Swift. Оператор условия if
Назад · Оглавление · Дальше
Contents |
Краткий синтаксис
Блок кода только для истинного результата:
var a = true if a { print(a) } Консоль: true
Проверяемое выражение должно возвращать значение Bool:
var a = 1 if a { // error: type 'Int' cannot be used as a boolean print(a) }
Использование логического отрицания (проверка на ложность):
var a = false if !a { print(a) } Консоль: false
Стандартный синтаксис
Два блока кода (истинный и ложный результат):
var a = true if a { print(true) } else { print(false) } Консоль: true
Использование логического оператора ИЛИ:
var a = true var b = false if a || b { print("Одна из переменных истинна") } else { print("Обе переменные ложны") } Консоль: Одна из переменных истинна
Сообщение "Одна из переменных истинна" будет выведено, если a = true или b = true.
Уточним результат с помощью логического оператора И:
var a = true var b = true if a && b { print("Обе переменные истинны") } else { if a || b { print("Одна из переменных истинна") } else { print("Обе переменные ложны") } } Консоль: Обе переменные истинны
Наиболее однозначные выражения проверяются в первую очередь: if a && b
Расширенный синтаксис
Проверка произвольного количества условий:
var a = false var b = false if a && b { print("Обе переменные истинны") } else if a || b { print("Одна из переменных истинна") } else { print("Обе переменные ложны") } Консоль: Обе переменные ложны
Количество блоков else if может быть произвольным, а наличие оператора else не является обязательным.
Наиболее однозначные выражения проверяются первыми.
Расчет дохода от аренды:
var tenantCount = 6 // количество жильцов в доме var rentPrice = 0 // стоимость аренды на человека if tenantCount < 5 { rentPrice = 1000 } else if tenantCount >= 5 && tenantCount <= 7 { rentPrice = 800 } else { rentPrice = 500 } var income = rentPrice * tenantCount // 4800
Использование оператора диапазона и метода contains(_:):
if (..<5).contains(tenantCount) { rentPrice = 1000 } else if (5...7).contains(tenantCount) { rentPrice = 800 } else if (8...).contains(tenantCount) { rentPrice = 500 }
Тернарный оператор условия
let a = 1 let b = 2 a <= b ? print("a <= b") : print("a > b") Консоль: a <= b
Тернарный оператор в составе выражения:
var height = 180 var isHeader = true let rowHeight = height + (isHeader ? 20 : 10) // 200
Оператор if для опционалов
Проверка наличия значения в опционале:
var a: Int? = 2 if a != nil { print(a! + 8) // ! - принудительное извлечение опционального значения }
Опциональное связывание (optional binding):
var a: Int? = 2 if let b = a { // область видимости b ограничена телом оператора if print(b + 8) // принудительное извлечение не требуется }
Глобальный объект - доступен в любой точке кода (область видимости не имеет ограничений):
var a: Int? = 2 var b = 0 // глобальная переменная b = 0 if var b = a { b += 3 // локальная переменная b = 5 } print(b) // глобальная переменная b = 0
Функция Int(_:) по возможности, преобразует строковый литерал в число и возвращает опциональный тип Int?
var a = "8" var b = 12 if let n = Int(a) { b += n // b = 20 }
Примеры
1.
typealias Text = String let x: Text = "123" let y: Text = "789" let z: Text = "1q2w3e" if let a = Int(x) { print(a) } if let a = Int(y) { print(a) } if let a = Int(z) { print(a) }
2.
typealias Text = String typealias TupleType = (numberOne: Text?, numberTwo: Text?)? var m: TupleType = ("190", "67") var n: TupleType = ("100", nil) var k: TupleType = ("-65", "70") printNotNil(m) printNotNil(n) printNotNil(k) func printNotNil(_ tt: TupleType) { if let a = tt?.numberOne, let b = tt?.numberTwo { print(a, b) } }
Назад · Оглавление · Дальше