Архив метки: swift

Swift: Generics (Универсальные шаблоны)

Если бы библиотеки писали под конкретные классы, нас бы ждало дублирование кода, очень много дублирования кода, и много приведения типов.

И так для каждого типа. Но лучше определить функцию которая будет работать с любым типом

– после имени функции, где T – заполнитель, указывающий на то как будет называться тип (в нашем случае переменные a и b –… Читать далее »

Swift 2.0: Protocol Extensions (Расширения протоколов)

В swift 2.0 добавили возможность расширить не конкретный класс, а протокол, добавив методы и свойства

Таким образом все типы, которые будут реализовывать этот протокол – получат доступ к методу из расширения.

Swift: Protocols (Протоколы)

Для тех кто пришел из мира C++/C#/Java – это по другому названные интерфейсы. Протокол определяет как должен выглядеть тип (класс, структура, перечисление), какие свойства, методы должны быть реализованы, но не определяет их сам. Синтаксис:

Протокол может затребовать у типа его реализующего: 1) реализовать свойство экземпляра (хранимое или вычисляемое – не важно), которое можно как читать так и писать 2)… Читать далее »

Swift: Extensions (Расширения)

Схожи с категориями в Objective-C, но не имеют имен. Позволяют расширить любой существующий класс, даже не имея доступа к исходным кодам, тот же Int Как именно могут: – добавлением вычисляемых свойств объекта и типа – добавлением методов объекта и типа – добавлением новых инициализаторов – добавлением индексов – добавлением и использованием новых вложенных типов – позволить существующему типу следовать протокола… Читать далее »

Swift: Nested Types (Вложенные типы)

Внутри типов можно определять другие типы, причем это касается структур, классов и перечислений. Для определения вложенного типа просто пишем его определение внутри другого типа. Доступ по точке, может быть многоуровневым.

Swift: Type Casting (Приведение типа)

Задача приведения типа стоит обычно в двух случаях. Когда мы в принципе не знаем что за объект перед нами и хотим проверками это понять, и когда у базового типа есть наследники, коллекция объявлена базового типа и опять таки нужно понять какой именно тип наследник перед нами. Чтобы узнать является ли экземпляр определенного типа существую оператор is

Будет выведено

Читать далее »

Swift: Optional Chaining (Опциональная последовательность)

Чтобы не захламлять проверками на nil опционалов при попытке вызвать метод или получить/вызвать свойство, получить доступ к индексу – дана возможность добавив знак вопроса после метода/свойства/индекса продвигаться вглубь вызовов, не обращая внимание на возможный nil в любом месте по ходу следствия.

Этот код выдаст или нужное значение, или nil, т.к. по ходу следования у всех обьектов стоит знак вопроса…. Читать далее »

Swift: Automatic Reference Counting (Автоматический подсчет ссылок)

Работает только с reference типам, что логично. Каждый раз как мы создаем экземпляр класса, ARC выделяет кусок памяти для хранения информации об этом экземпляре (тип экземпляра + значения всех хранимых свойств) Когда ссылок на этот экземпляр не станет – ARC автоматически освободит занимаемую этим экземпляром память. Работает это за счет подсчета ссылок на экземпляр. Каждое свойство, или переменная имеющие сильную… Читать далее »

Swif: Deinitialization – деинициализация

Доступна только для ссылочных классов. синтаксис простой

Используется для освобождение ресурсов за которые не отвечает ARC, освобождение ресурсов и т.д. После выполнение кода в deinit – автоматически вызывается deinit родителя

Swift: Initialization (Инициализация)

Подразделы: Customizing Initialization – кастомизированная инициализация Default Initializers – инициализаторы по умолчанию Memberwise Initializers for Structure Types (Почленный инициализатор для структуры) Initializer Delegation for Value Types – Делегирование инициализаторов для значимых типов Class Inheritance and Initialization (Наследование классов и инициализация) Two-Phase Initialization – двухфазовая инициализация Failable Initializers (Проваливающиеся инициализаторы) Required Initializers – требуемые инициализаторы Setting a Default Property Value with… Читать далее »