Cocoa, Swift, Objective-C: Adopting Cocoa Design Patterns (Адаптация Cocoa паттернов)

Adopting Cocoa Design Patterns (Адаптация Cocoa паттернов) Подразделы: Delegation (Делегирование) Error Handling (Обработка ошибок, Swift 2.0) Key-Value Observing (наблюдатель за изменениями в свойствах объектов) Target-Action (Цель-Действие) Introspection (Самонаблюдение) API Availability (доступность API) Swift 2.0 Delegation (Делегирование) Пожалуй самый часто используемый паттерн, реализуется с помощью свойства в которое сохраняется делегат. Главный подводный камень — не забыть проверить что делегат не равен… Читать далее »

Cocoa, Swift, Objective-C: Working with Cocoa Data Types (Работа с Cocoa типами данных)

Подразделы: Strings (строки) Numbers (числа) Collection Classes (классы коллекций) Swift 2.0: Errors (Ошибки) Foundation Data Types (Типы данных foundation) Foundation Functions (функции Foundation) Core Foundation Unmanaged Objects (Неуправляемые объекты) Существуют типы в Swift и Objective-C, которые являются взаимозаменяемыми (bridged). Например NSString и String, NSArray и Array Strings (строки) Везде где в API ожидается NSString мы можем подставлять Swift String, и… Читать далее »

Cocoa, Swift, Objective-C: Using Swift Class Names with Objective-C APIs (Использование Swift имен классов в Objective-C API)

В Objective-C нет пространств имен, в swift есть. К примеру полное имя класс SwiftTestClass в приложении SwiftTest из главы Взаимодействие swift с Objective-C будет SwiftTest.SwiftTestClass. Важно это не забывать когда приходится работать с api принимающем имя класса как строку.

Cocoa, Swift 2.0, Objective-C: Implementing Core Data Managed Object Subclasses (Реализация наследников Core Data управляемых объектов)

В Objective-C был атрибут @dynamic, в swift используется атрибут @NSMAnaged для обозначения свойств имеющих связь в модели CoreData. Не забываем что классы в Swift используют пространства имен, не забываем его указывать в поле Class

Cocoa, Swift 2.0, Objective-C: Property Attributes (атрибуты свойств)

Strong/Weak (сильные/слабые) По умолчанию свойства сильные. Можно применить к свойству ключевое слово weak, но только если они имеет тип опционала. Более подробно смотри Automatic Reference Counting (Автоматический подсчет ссылок) Read/Write и Read-Only (чтение/запись и только для чтения) У Swift‘а нет специальный ключевых слов для того чтобы определить данный аспект. Если для хранимых свойств нужно Read-Only — используем let, нужно read/write… Читать далее »

Cocoa, Swift 2.0, Objective-C: Integration with Interface Builder (Интеграция с Interface Builder)

Outlet (ссылка на элемент интерфейса) и action (метод вызываемый из интерфейса элементом) — позволяют связывать исходный код с объектами интерфейса в Interface Builder. В swift чтобы их использовать надо предварить определение метода или свойства атрибутом @IBOutlet или @IBAction соответственно. Для outlet colletcion — также используется @IBOutlet, просто в качестве типа — массив. Т.к. связывание элементов интерфейса с кодом происходит в… Читать далее »

Cocoa, Swift 2.0, Objective-C: Writing Initializers and Deinitializers (Написание инициализаторов и деиницианализаторов)

Основы были описаны в Initialization (Инициализация) и Deinitialization (Деинициализация) Если swift класс был унаследован от Objective-C, он конвертирует инициализаторы тоже. Если же нужна дополнительная очистка перед тем как класс будет уничтожен можно реализовать свой деинициализатор вместо метода dealloc. Swift деинициализатор вызывается прямо перед деаллокацией. Swift для классов унаследованных от Objective-C сам вызывает dealloc.

Cocoa, Swift 2.0, Objective-C: Writing Swift Classes with Objective-C Behavior (Написание Swift классов с поведением Objective-C)

В Swift мы можем создать класс унаследовав его от Objective-C класса точно так же как мы можем наследоваться от swift классов.

Если класс должен реализовать протокол NSCoding — необходимо реализовать инициализатор init(coder:). Если наследник класса реализующего протокол NSCoding получает дополнительные инициализаторы или любое свойство без начального значения — они тоже должны переопределять этот инициализатор. У XCode есть код заглушка… Читать далее »

Cocoa, Swift 2.0, Objective-C: Objective-C Selectors (Селекторы Objective-C)

В Objective-C селектор — это тип указывающий на имя метода. В Swift селекторы представлены структурой Selector, причем создавать ее можно с помощью обычной строки

Поэтому везде где код ждет селектор — можно использовать строку

Но в Swift запретили использовать performSelector и иже с ним, т.к. это небезопасно Если Swift класс унаследован от Objective-C все методы и свойства —… Читать далее »

Cocoa, Swift 2.0, Objective-C: Lightweight Generics (легковесные дженерики)

Наконец добавили типизированность в Objeсtive-C, но к сожалению в ограниченном обьеме — только для коллекций. К примеру Objective-C код

будет импортирован в swift как

Но, повторюсь доступно это лишь для Foundation стандартных коллекций