Опціональні значення (основи swift)

опціональні значення

Ви можете використовувати опціональні значення в ситуаціях, де значення може бути відсутнім. Опціональне значення говорить одне з двох:

«У мене є значення і воно дорівнює х»

»У мене немає ніякого значення»

Концепції опціональних значень не існує в С або Objective-C. Найближче в Objective-C - це можливість повертати nil з методу, який повертає об'єкти. nil як би позначає, що «коректний об'єкт відсутній», однак це працює тільки об'єктів, але не для структур, базових типів або перерахувань. Для цих типів, Objective-C методи зазвичай повертають яке-небудь спеціальне значення (наприклад, NSNotFound), щоб позначити відсутність значення. Цей підхід передбачає, що код, що викликає метод, знає про те, що є це спеціальне значення і що його потрібно враховувати. Опціонально значення в Swift дозволяють вам вказати можливість відсутності значення для будь-якого типу, без потреби використання додаткових констант.

Наведемо приклад. Тип String має метод toInt, який пробує перевести вміст рядка в цілочисельне значення типу Int. Однак, не кожен рядок може бути сконвертовано ст ціле число. З рядка «123» виходить число 123, проте з рядка «hello, world» можна отримати цілочисельного значення.

Приклад нижче використовує метод toInt, щоб спробувати перевести рядок в Int:

// convertedNumber тепер має тип "Int?" (Так-так, саме Int зі знаком питання), або так званий "опціональний Int"

Оскільки метод toInt може не спрацювати, він повертає опціональний Int, а не звичайний Int. Опціональний Int записується як Int? - знак питання показує, що значення є опціональним, тобто змінна або константа типу Int? може або містити будь-яке значення Int. або не містити жодного значення взагалі. (Вона не може містити нічого іншого, тобто Bool, String і т.д. _не_ можуть зберігатися в ній. Або Int, або нічого).

Ви можете привласнити опціональною змінної стан «без значення», присвоївши їй спеціальне значення nil:

Для більшої інформації про умовні конструкціях, зверніться до глави «Контроль управління» на нашому сайті.

Спроба використовувати. для того, щоб дістати значення у випадках, коли його немає в опціонально значенні, викличе помилку часу виконання (runtime error), тобто помилку під час роботи програми. Тому завжди переконуйтеся, що значення міститься, перш ніж використовувати знак оклику.

опциональная зв'язка

Ви можете використовувати опциональную зв'язку, щоб дізнатися, чи містить опциональная змінна значення і якщо містить, то зберегти його в тимчасову константу або змінну. Опциональная зв'язка може бути використана з if і while, щоб перевірити, що значення присутній в опціональною змінної і витягти його в константу або іншу зміну одним дією. if і while описуються в розділі «Контроль управління» на нашому сайті.

Опціональні зв'язки реалізуються в такий спосіб:

Цей код можна прочитати так:

«Якщо опціональний Int, що повертається методом possibleNumber.toInt, містить значення, то створіть нову константу actualNumber зі значенням, яке там міститься».

Якщо конвертація пройшла успішно, actualNumber стає доступною в межах першої гілки вираження if. Вона вже инициализирована значенням, тому немає потреби використовувати знак оклику. У нашому прикладі ми просто виводимо її на екран.

Неявне розгорнуті опціональні значення (implicit unwrapped optionals)

Як описано вище, опціональні значення позначають, що константа або змінна може не мати ніякого значення. Ми можемо перевірити це, використовуючи if і отримати значення, використовуючи знак оклику або опциональную зв'язку.

Іноді зі структури додатка видно, що опциональная змінна або константа буде завжди мати значення після того, як воно вперше було встановлено. У цих слчаях, корисно якимось чином прибрати нужду в перевірці і «діставання» значення кожен раз, коли ми звертаємося до цієї змінної.

Неявно розгорнуті опціональні константи і змінні корисні, коли відомо, що значення буде постійно присутня в змінної або константи з якогось моменту. Основне використання таких опціональних змінних в Swift - при ініціалізації класу, як описується в розділі «Посилання без власників і неявно розгорнуті опціональні властивості»

Неявно розгорнута опциональная константа або змінна - це звичайна опциональная змінна в своїй суті, але може бути використана як неопціональная, без необхідності «діставати» її значення при кожному доступі. Найкраще подивитися на це пекло на прикладі: