Введення в обробку помилок в Swift 3

Сьогодні ми підготували переклад для тих, хто так само, як автор статті, при вивченні Документації мови програмування Swift уникає голови «Error Handling».

Зі статті ви дізнаєтеся:

  • що таке оператор if-else і що з ним не так;
  • як подружитися з Error Handling;
  • коли варто використовувати Try! і Try?


Читати далі →

Багатопоточність (concurrency) в Swift 3. GCD і Dispatch Queues

Треба сказати, що многопоточность (сопсиггепсу) в iOS завжди входить до питання, що задаються на інтерв'ю розробників iOS додатків, а також в число топ помилок, які роблять програмісти при розробці iOS додатків. Тому так важливо володіти цим інструментом досконало.
Отже, у вас є додаток, воно працює на
main thread
(головному потоці), який відповідає за виконання коду, що відображає ваш користувальницький інтерфейс (
UI
). Як тільки ви починаєте додавати до вашого додатком такі «затратні за часом» шматки коду, як завантаження даних з мережі або обробка зображень на
main thread
(головному потоці), то робота вашого
UI
починає сильно сповільнюватися і навіть може призвести до повного його «заморожування».



Як можна змінити архітектуру програми, щоб таких проблем не виникало? У цьому випадку на допомогу приходить багатопоточність (
сопсиггепсу
), яка дозволяє одночасно виконувати дві або більш незалежні задачі (
завдання
): обчислення, завантаження даних з мережі або з диска, обробку зображень і т. д.

Читати далі →

Переходимо на Swift 3 з допомогою міграційного «робота» в Xcode 8.1 та 8.2



Вже відомо, що
<i>Xcode 8.2</i>
буде останнім релізом, який підтримує перехідну версію
<i>Swift 2.3</i>
. Тому потрібно терміново подумати про міграції на
<i>Swift 3</i>
.

Я хочу поділитися деяким досвідом такої міграції на прикладі додатків, пов'язаних зі стенфордським курсом «Developing iOS 9 Apps with Swift», як демонстраційних (їх 12), так і отриманих в результаті виконання Завдань навчального курсу (їх 6 варіантів). Всі вони різної складності, але там є і малювання, і багатопоточність, і показ зображень з допомогою
<font color="#0000FF">ScrollView</font>
, і робота з сервером Twitter, і база даних Core Data і робота з хмарним сервісомCloud Kit, і карти Map Kit. І все це було написано на
<i>Swift 2.2</i>
(stanford.edu), а мені було необхідно перевести всі додатки на
<i>Swift 3</i>
. Конспект лекцій стенфордського курсу російською мовою можна знайти на сайті «Про стэнфордских лекціях», а код — для Swift 2.3Github і Swift 3 Github.

Читати далі →

Як ще використовувати type safety в цілях поліпшення API

Всім привіт! Я — lead developer cocos2d-objc. Зараз ми знаходимося в процесі портування на Swift. Я планую висвітлювати процес розробки, розповідати архітектурні рішення і т. д. Поки що проект ще на proof-of-a-concept стадії, тому сьогодні я розповім тільки про маленькому прийомі, який, як я вважаю, зробив нашу математичну бібліотеку трохи краще. Якщо цікаво — прошу під кат.
image

Читати далі →

Enums + Associated Values = Swift

Swift — означає швидкий. Швидкий — значить зрозумілий, простий. Але досягти простоти і зрозумілості непросто: зараз в Swift швидкість компіляції так собі, та й деякі моменти мови викликають питання. Тим не менш можливість перерахувань (enum'ів), про яку я розповім (associated values — приєднувані значення) — одна з найкрутіших. Вона дозволяє скоротити код, зробити його зрозумілішим і надійніше.


Читати далі →

Що нового в Swift 3?

image

Як ми всі давно знаємо, Apple інтегрувала Swift 3 в Xcode 8. Це перша версія мови з відкритим вихідним кодом, який працює як macOS, так і на Linux. Якщо ви стежили за процесом розвитку мови на Swift Evolution з грудня минулого року і встигли з ним поекспериментувати в IBM sandbox, ви вже напевно зрозуміли, що в ньому з'явилося безліч змін. Абсолютно впевнений, що при компіляції існуючого проекту в Xcode 8, код здивує вас наявністю помилок. Але це можна виправити. Давайте познайомимося з деякими змінами в новій версії мови.

Читати далі →

Альтернатива NSLocalizedString, зміна мови без перезавантаження програми

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

Основною проблемою було те, що зміни мови вступають в силу тільки при перевантаженні додатки, що з точки зору юзабіліті, не дуже приємно і зручно для користувача.

Якщо звичайно у вас немає чіткої завдання зміни мови в програмі, то можна використовувати і стандартний NSLocalizedString. Якщо ж у вас передбачена така можливість NSLocalizedString стає дуже незручним.

Читати далі →

Архітектура мережевого ядра в iOS-додатку на Swift 3. Частина 1

Мережеве ядро як частина програми
Для початку трохи поясню, про що піде мова в даній статті. Зараз більшість мобільних додатків, на мій погляд, є клієнт-серверними. Це означає, що вони містять у складі коду мережеве ядро, яке відповідає за пересилання запитів та отримання відповідей від сервера. Причому мова зовсім не про мережевих бібліотеках, які беруть на себе відповідальність за «низкорівневому» управління запитами на зразок пересилання REST-запитів, побудови multipart-тіла, роботи з сокетами, веб-сокетами, і так далі. Мова йде про додаткову обв'язку, яка дозволяє управляти запитами, відповідями і даними стану, характерними конкретно для вашого сервера. Саме у варіантах реалізації цієї обв'язки і укладені основні проблеми мережного рівня в багатьох мобільних проектах, з якими мені доводилося працювати.

Дана стаття ставить за мету привести один з варіантів архітектурного рішення по побудові мережевого ядра програми, до якого я прийшов після довгого часу роботи з різними моделями і різними серверними API, і який на даний момент є найбільш оптимальним для завдань, що зустрічаються мені в процесі роботи над проектами. Сподіваюся, цей варіант допоможе вам розробити добре структуроване і легко розширювана мережева ядро, якщо ви починаєте новий проект або модифікуєте існуючий. Також буду радий почути ваші поради та коментарі щодо поліпшення коду і/або запропонованої архітектури. І так, стаття з-за великого обсягу буде випущена в двох частинах.

Подробиці під катом.

Читати далі →

У пошуках чистої архітектури (1-я частина) — Swift 3.0

image

Вітаю шановних жителів Хабрахабра!

Не так давно я став помічати, що мій код стає громіздким і навіть у рамках одного контролера мені все складніше втримати в голові те, що в ньому відбувається. Як наслідок, на виході не завжди очікуваний результат, що я хотів реалізувати, так як мозок «замилилося» і я легко можу втратити істотну деталь. А після, ручної аналіз коду, робота з відладчиком і так далі… Та що вже говорити, доходило до абсурду, при складанні програми xcode падав мертвим і я навіть не встигав зрозуміти, що трапилося в додатку! Потрібно було щось змінювати і думати над архітектурою, так як я не хочу всю свою кар'єру писати плохоподдерживаемый код…

Кому цікавий питання архітектури, ласкаво просимо під кат!
Читати далі →