Основи Swift. Типи даних

В цій статті ми продовжуємо вивчати програмування на Swift, мові, за допомогою якої створюються додатки для iOS та програми для OS X. Сьогодні вас чекає огляд типів даних мови програмування Swift, а також трішки коду.

При написанні коду ми працюємо з різними типами даних Swift. Базові типи, які використовуються найчастіше:

  1. String (текстовий рядок);
  2. Int (ціле число);
  3. Float (32-бітне число з плаваючою комою);
  4. Double (64-бітне число з плаваючою комою для довших змінних);
  5. Bool (логічне значення «true» або «false»).

Swift обробляє їх усіх окремо. Подивимося на особливості типів даних Swift.

Тип String

Ми вже ознайомилися з типом String (рядок символів), коли присвоїли текстове значення змінній. Рядки можуть бути довгими (мільйон і більше букв), короткими (10 букв) або навіть порожніми (без жодної букви). При цьому всі вони працюють однаково.

Swift знає, що змінна name повинна містити рядок, оскільки під час її створення ми ввели текстове значення «Tim McGraw»:

var name ="Tim McGraw"

Якщо переписати код наступним чином, наш проект перестане працювати:

var name
name ="Tim McGraw"

Xcode видасть повідомлення про помилку: «Type annotation missing in pattern», що перекладається буквально як: «Я не можу визначити тип даних, оскільки ви не надали достатньо інформації».

Як діяти в такій ситуації? Насправді у нас є два варіанти: або ініціювати змінну з початковим значенням, або вказати її тип. Створимо змінну, вказавши її тип (String) після двокрапки, а початкове значення присвоїмо пізніше в будь-якій частині коду:

var name: String
name ="Tim McGraw"

Такий запис не призведе до помилки, оскільки Swift знає, який тип даних змінна name отримає в майбутньому.

Зверніть увагу: щоб ваш код був «чистим», не ставте пробіл перед двокрапкою.

Swift завжди прагне заздалегідь знати, якому типу даних відповідає визначення кожної нової змінної та константи. І це добре з точки зору розробника, адже в такому випадку для нього вже реалізовано механізм усунення можливих помилок, пов'язаних з невідповідністю вводимого значення заданому в визначенні типу даних. Наприклад, Swift відмовиться присвоїти числове значення рядковій змінній.

Тип Int

Спробуємо створити нову змінну з типом Int, яка містить ціле число, тобто число без дробової частини. Це можуть бути як позитивні (прості), так і негативні цілі числа: 3, 30, 300, –16777216...

var name: String
name ="Tim McGraw"
var age: Int
age =25

Ми ініціювали рядкову змінну name та цілочисельну змінну age.

Зверніть увагу на обов'язкові вимоги: в мові Swift прийнято стандартне угоду про кодування, відповідно до якого імена змінних, констант, методів, функцій починаються з маленької літери (name, age), а типи даних — з великої (String, Int).

Тепер, коли у нас є дві змінні з різними типами даних, ми можемо перевірити роботу механізму відповідності типів в дії. Зробимо наступне:

name =25
age ="Time McGraw"

В цьому коді ми намагаємося присвоїти ціле число рядковій змінній і рядок — цілісній змінній. На щастя, Xcode повідомить нам про помилки, дотримуючись негласного угоди: програміст повідомляє про те, які дані збирається зберігати в змінних, а середовище бере на себе функції контролю за їх строгим і неухильним дотриманням.

Перед тим, як рухатися далі, видаліть або закоментуйте ці дві рядки, в іншому випадку весь наступний код в playground працювати не буде.

Типи Float і Double

У Swift типи даних Float і Double використовуються для зберігання чисел з плаваючою комою, наприклад: 3,1; 3,141; 3,1415926; –16777216,5. Вони відрізняються між собою тільки кількістю відображуваних цифр у десятковій частині числа. Компанія Apple рекомендує завжди використовувати тип Double за замовчуванням.

Введіть наступний код у playground:

var latitude: Double
latitude =36.166667
var longitude: Float
longitude =86.783333

Зверніть увагу, що при виведенні результатів у правій частині робочої області playground змінна longitude десь «втратила» цифру «3» в кінці. Щоб краще зрозуміти, що відбувається, трохи змінимо наш попередній код:

var longitude: Float
longitude =86.783333
longitude =186.783333
longitude =1286.783333
longitude =12386.783333
longitude =123486.783333
longitude =1234586.783333

Змінна longitude має тип Float, в якому передбачено 8 біт для зберігання даних. Це накладає обмеження на відображення цілого і дробового частини — Swift постійно намагається «выровнять» число, «забираючи» розряди з дробової частини і додаючи їх до цілого частини числа. Чим ближча ліва сторона до свого максимуму, тим менше місця залишається для правої!

Типи даних Float і Double в playground

Змінивши тип з Float на Double, ми отримаємо коректне відображення всіх чисел:

var longitude: Double

У цьому прикладі показано основну відмінність між типами Double і Float. Воно полягає в подвійній точності зберігання і відображення збережених чисел. Окремо хочу звернути увагу на те, що при спробі введення великого числа, наприклад, 123456789,123456789 результат буде округлений до 123456789,1234568.

Тип Boolean

У Swift є вбудований тип даних, який використовується для зберігання значень «true» і «false». Він називається Boolean або коротко Bool:

var stayOutTooLate: Bool
stayOutTooLate =true
var nothingInBrain: Bool
nothingInBrain =true
var missABeat: Bool
missABeat =false

Підсумуємо. Ми дізналися про основні типи даних у мові Swift (String, Int, Float, Double та Bool), а також про механізм запобігання введенню значення змінної, яке не відповідає її типу. У наступній статті ми розповімо про анотування типів даних (в Swift анотації — це необов'язкові елементи коду, мова визначає тип даних, виходячи з присвоєного значення), а також про інтерполяцію рядків.

Джерело: Hacking with Swift

Читайте далі: Основи Swift. Інтерполяція рядків та анотування типів даних

Потрібен MVP, розробка під iOS, Android або прототип додатку? Ознайомтеся з нашим портфоліо та замовте вже сьогодні!