Оператори порівняння порівнюють два значення одного типу й повертають значення Bool (true або false).
Якщо спробувати порівняти значення різних типів, компілятор видасть помилку.
Стандартні оператори порівняння у Swift такі:
| Оператор | Опис | Приклад |
|---|---|---|
== |
дорівнює |
1 == 1 (правда) |
!= |
не дорівнює |
1 != 2 (правда) |
< |
менше |
4 < 5 (правда) |
<= |
менше або дорівнює |
4 <= 4 (правда) |
> |
більше |
3 > 1 (правда) |
>= |
більше або дорівнює |
2 >= 2 (правда) |
if та else
Умовна конструкція виконує код залежно від того, чи обчислюється умова до true або false.
Найпоширеніша умовна конструкція - це умовний оператор if, який виконує блок коду лише тоді, коли його умова дорівнює true.
Щоб написати умовний оператор if, використовують ключове слово if, після якого йде умова, а потім блок коду у фігурних дужках:
let wheelCount = 4
if wheelCount == 4 {
print("Your vehicle is a car")
}
// Prints "Your vehicle is a car"
Можна поєднати if з частиною else, щоб виконати альтернативний код, коли умова дорівнює false:
let precipitationInMM = 0.5
if precipitationInMM > 0.5 {
print("You will need an umbrella")
} else {
print("You will not need an umbrella")
}
// Prints "You will not need an umbrella"
Щоб перевірити кілька умов послідовно, обʼєднують інструкції в ланцюжок за допомогою else if.
Інструкція if не потребує гілки else, але її можна додати, щоб обробити випадки, коли жодна з умов не збігається:
let favoriteFruit = "Apple"
if favoriteFruit == "Banana" {
print("Your favorite fruit is a banana")
} else if favoriteFruit == "Orange" {
print("Your favorite fruit is an orange")
} else if favoriteFruit == "Apple" {
print("Your favorite fruit is an apple")
} else {
print("Your favorite fruit is not a banana, orange, or apple")
}
// Prints "Your favorite fruit is an apple"
if
У сучасному Swift інструкції if можна також використовувати як вирази, що дають значення.
Кожна гілка дає значення, тож результати легко присвоювати залежно від умови:
let cpuBits = 32
let architecture = if cpuBits == 64 {
"x86_64"
} else {
"x86_32"
}
print(architecture)
// Prints "x86_32"
Тернарний умовний оператор - це стислий запис виразу if-else.
Він обчислює умову й повертає одне з двох значень залежно від того, чи має ця умова значення true або false.
Оператор складається з трьох частин: condition ? trueExpression : falseExpression.
Якщо condition обчислюється до true, обчислюється й повертається trueExpression, інакше обчислюється й повертається falseExpression.
Тернарний оператор стане в пригоді, коли потрібен простий вибір в один рядок:
let showFahrenheit = true
let temperatureInCelsius = 30
let temperature = showFahrenheit ? temperatureInCelsius * 9 / 5 + 32 : temperatureInCelsius
print(temperature)
// Prints 86
Наведений вище приклад - це компактний відповідник такого коду:
let showFahrenheit = true
let temperatureInCelsius = 30
let temperature = if showFahrenheit {
temperatureInCelsius * 9 / 5 + 32
} else {
temperatureInCelsius
}
У цій вправі ми напишемо трохи коду, щоб підготуватися до покупки транспортного засобу.
На нас чекають три завдання: визначити, чи вистачить нам грошей на щомісячні платежі; зʼясувати, які права водія нам знадобляться; та оцінити прийнятну ціну вживаного транспортного засобу.
Усі автодилери в нашому місті проводять пʼятирічну акцію з 0% річних, якою ми хотіли б скористатися. Але ми не впевнені, чи зможемо дозволити собі щомісячні платежі за автомобіль, який хочемо.
Щомісячний платіж - це загальна ціна автомобіля, поділена на кількість місяців у пʼятирічному періоді.
Реалізуйте функцію canIBuy(vehicle:price:monthlyBudget:), яка приймає такі аргументи:
vehicle - назва транспортного засобу, який ми хочемо купити.price - ціна транспортного засобу, який ми хочемо купити.monthlyBudget - сума грошей, яку ми можемо дозволити собі платити щомісяця.Залежно від умов функція має повернути таке повідомлення:
"Yes! I'm getting a <vehicle>"."I'll have to be frugal if I want a <vehicle>"."Darn! No <vehicle> for me".canIBuy(vehicle: "1974 Ford Pinto", price: 516.32, monthlyBudget: 100.00)
// returns "Yes! I'm getting a 1974 Ford Pinto"
canIBuy(vehicle: "2011 Bugatti Veyron", price: 2_250_880.00, monthlyBudget: 10000.00)
// returns "Darn! No 2011 Bugatti Veyron for me"
canIBuy(vehicle: "2020 Indian FTR 1200", price: 12_500, monthlyBudget: 200)
// returns "I'll have to be frugal if I want a 2020 Indian FTR 1200"
Ми вирішили купити вживаний транспортний засіб і маємо визначити, які права водія потрібні, щоб ним керувати.
Реалізуйте функцію licenseType(numberOfWheels:), яка приймає аргумент numberOfWheels - кількість коліс транспортного засобу, який ми хочемо купити.
Залежно від умов функція має повернути таке повідомлення:
"You will need a motorcycle license for your vehicle"."You will need an automobile license for your vehicle"."You will need a commercial trucking license for your vehicle"."We do not issue licenses for those types of vehicles".licenseType(numberOfWheels: 2)
// returns "You will need a motorcycle license for your vehicle"
licenseType(numberOfWheels: 6)
// returns "You will need an automobile license for your vehicle"
licenseType(numberOfWheels: 18)
// returns "You will need a commercial trucking license for your vehicle"
licenseType(numberOfWheels: 0)
// returns "We do not issue licenses for those types of vehicles"
Тепер, коли ми прийняли рішення, хочеться переконатися, що в автосалоні нам дадуть справедливу ціну. Оскільки ми хочемо купити вживаний транспортний засіб, його ціна залежить від віку. Для приблизної оцінки припустімо, що якщо транспортному засобу менше ніж 3 роки, він коштує 80% початкової ціни, яку мав, коли був новим. Якщо йому щонайменше 10 років, він коштує 50%. Якщо транспортному засобу щонайменше 3 роки, але не більше ніж 10 років, він коштує 70% початкової ціни.
Реалізуйте функцію calculateResellPrice(originalPrice:yearsOld:), яка приймає аргументи originalPrice - початкова ціна транспортного засобу, та yearsOld - вік транспортного засобу в роках.
Функція має повернути ціну перепродажу транспортного засобу.
calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500
Зареєструйтеся на Exercism, щоб вивчати й опановувати Swift, а також 35 концепцій116 вправ та справжнє наставництво від людей, і все це безкоштовно.