Swift. Оператор условия if

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
Line 1: Line 1:
 
<div style='max-width:700px;text-align:justify;'>
 
<div style='max-width:700px;text-align:justify;'>
[[Swift. Утверждение (assert)|Назад]] ·
+
[[Swift. Оператор ветвления switch|Назад]] ·
 
[[Swift|Оглавление]] ·
 
[[Swift|Оглавление]] ·
 
[[Swift. ?|Дальше]]
 
[[Swift. ?|Дальше]]
Line 242: Line 242:
  
 
----
 
----
[[Swift. Утверждение (assert)|Назад]] ·
+
[[Swift. Оператор ветвления switch|Назад]] ·
 
[[Swift|Оглавление]] ·
 
[[Swift|Оглавление]] ·
 
[[Swift. ?|Дальше]]
 
[[Swift. ?|Дальше]]
 
</div>
 
</div>

Revision as of 09:10, 13 April 2022

Назад · Оглавление · Дальше


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)
    }
}



Назад · Оглавление · Дальше

Personal tools
Namespaces

Variants
Actions
Navigation
Tools