Архив автора: Администратор

Cocoa, Swift, Objective-C: Swift Type Compatibility (совместимость типов Swift)

Как уже говорилось выше, чтобы swift класс(свойство, индекс, метод) были доступны в Objective-C — необходимо предварять их атрибутом @objc (при использовании атрибутов @IBOutlet, @IBAction, или @NSManaged — атрибут @objc добавляется автоматически). Если класс унаследован от NSObject — этот класс автоматически помечается этим атрибутом. В классе помеченном @objc все public и internal члены автоматически помечаются @objc С помощью @objc так же… Читать далее »

Cocoa, Swift, Objective-C: Object Comparsion (сравнение объектов)

Equality (равенство, ==) — это одинаковое ли содержание объектов. Identity (идентичность, ===) — идентичны ли объекты (один и тот же объект). Если swift класс унаследован от NSObject, то он реализует ==, который вызывает метод isEqual:, но у NSObject реализация этого метода заключается именно в проверке на идентичность. Так что если нужно свое поведение при сравнении — нужно переопределять isEqual (не… Читать далее »

Cocoa, Swift, Objective-C: Closures and Blocks (Замыкания и блоки)

Сами замыкания рассмотрены в первой книге Closures (Замыкания) Блоки Objective-C автоматически импортируются как замыкания в swift, но с пометкой атрибутом @convention(block) Чтобы была возможность вживую протестировать код из этой главы — нужно создать проект из Взаимодействие swift с Objective-C Добавим в ObjcTestClass.h свойство которое должно сдержать блок

Теперь в swift коде использующем этот Objective-C класс мы можем присвоить этому… Читать далее »

Cocoa, Swift, Objective-C: Working with nil (Работа с nil)

Основная идея была раскрыта в пункте Implicitly Unwrapped Optionals (Неявно распакованные опционалы) Добавлю лишь, что помимо nonnull и nullable есть возможность оборачивать целые секции в макрос NS_ASSUME_NONNULL_BEGIN и NS_ASSUME_NONNULL_END, внутри секции все параметры и возвращаемые значения должны быть не равны nil. Например:

Cocoa, Swift, Objective-C: id Compatibility (Id совместимость)

Id в Objective-C — это любой объект. Для того, чтобы как то отразить id в swift ввели протокол AnyObject. Таким образом все id при портировании в swift заменяют на AnyObject. Так же можно переназначить переменную объектом другого типа, если ее тип указан как AnyObject

Так же возможно вызывать любой Objective-C метод или свойства на AnyObject (включая Objective-C совместимые методы… Читать далее »

Cocoa, Swift, Objective-C: Working with Methods (Работа с методами)

Методы из Objective-C переносятся в swift практически без изменений, квадратные скобки заменяются на круглые но идут после имени метода, а не перед объектом его содержащим, первое двоеточие убирается если в метод передавались параметры. Вызываются как и свойства по точке

О методах в swift описывалось здесь: Methods (Методы)

Cocoa, Swift, Objective-C: Accessing Properties (Обращение к свойствам)

Доступ к свойствам Objective-C по точке без использования скобок

Скобки после darkGrayColor потому что, это метод класса а не свойство. В Objective-C если метод без аргументов возвращает значение — его можно было использовать как свойство (по getter) Но в Swift только свойства которые были помечены как @property являются свойствами.

Cocoa, Swift, Objective-C : Initialization (Инициализация)

Инициализаторы в Objective-C имеют вид initИмяПеременной или initWithИмяПеременной В swift метод должен называться именно init, поэтому With если есть удаляется, а ИмяПеременной переходит в качестве имени первого параметра метода init Было

Стало

Вызывать alloc больше не нужно. Для удобства фабричные методы Objectve-C соотнесли с соответствующими init методами Swift

По умолчанию инициализаторы из Objective-C транслируются в swift… Читать далее »

Cocoa, Swift, Objective-C: Взаимодействие swift с Objective-C

Подразделы: Как использовать совместно Objective-C и swift из одного Framework Target При использовании swift из Objective-C мы не можем пользоваться специфическими фишками языка swift Naming Your Product Module (именование модуля продукта) Подводные камни Как использовать совместно Objective-C и swift из одного App Target Если мы пишем обычное приложение и хотим сделать импорт Objective-C для работы в swift необходимо создать Objective-C… Читать далее »

Swift 2.0: Checking API Availability (Проверка доступности API)

Теперь мы всегда в runtime узнать на какой именно платформе мы запущены и применить специфические функции в случае если они доступны с помощью #available

Доступны проверки для iOS, OSX, watchOS, iOSApplicationExtension, OSXApplicationExtension Звездочка обязательна, она означает что этот код будет доступен не только для указанных платформ но и для будущих (иначе после каждого релиза ОС пришлось бы добавлять новые… Читать далее »