Миграция кода Objective C к Swift
Миграция предоставляет возможность, чтобы пересмотреть существующее приложение Objective C и улучшить его архитектуру, логику и производительность путем замены частей его в Swift. Для прямой, инкрементной миграции приложения Вы будете использовать инструменты, изученные ранее — смешивание и подгонка плюс функциональная совместимость. Функциональность смешивания и подгонки упрощает выбирать, какие опции и функциональность для реализации в Swift, и чтобы уехать в Objective C. Функциональная совместимость позволяет интегрировать те функции назад в код Objective C без преград. Используйте эти инструменты, чтобы исследовать обширную функциональность Swift и интегрировать ее назад в Ваше существующее приложение Objective C, не имея необходимость переписывать целое приложение в Swift сразу.
Подготовка кода Objective C для миграции
Прежде чем Вы начнете перемещать свою кодовую базу, удостоверьтесь, что Ваш Objective C и Код SWIFT будут иметь оптимальную совместимость. Это означает убираться и модернизировать Вашу существующую кодовую базу Objective C. Ваш существующий код должен следовать за современными методами кодирования, чтобы упростить взаимодействовать с Swift беспрепятственно. Для короткого списка методов для принятия перед продвижением посмотрите Принятие современного Objective C.
Процесс миграции
Самый эффективный подход для миграции кода к Swift находится на основе на файл — т.е. один класс за один раз. Поскольку Вы не можете разделить классы Swift на подклассы в Objective C, лучше выбирать класс в Вашем приложении, не имеющем никаких подклассов. Вы замените .m
и .h
файлы для того класса с синглом .swift
файл. Все от Вашей реализации и интерфейса пойдет непосредственно в этот единственный файл Swift. Вы не создадите заголовочный файл; XCode генерирует заголовок автоматически в случае, если необходимо сослаться на него.
Перед запуском
Создайте класс Swift для своего соответствующего Objective C
.m
и.h
файлы путем выбора File> New> File> (iOS или OS X)> Источник> Swift Файл. Можно использовать то же или другое имя, чем класс Objective C. Префиксы класса являются дополнительными в Swift.Импортируйте соответствующие системные платформы.
Заполните заголовок образования моста Objective C, если необходимо получить доступ к коду Objective C от той же цели приложения в файле Swift. Для инструкций посмотрите Код Импорта из Того же Приложения Target.
Для создания класса Swift доступной и применимой спиной в Objective C сделайте его потомком класса Objective C или отметьте его с
@objc
атрибут. Для указания определенного имени для класса для использования в Objective C отметьте его с@objc(<#name#>)
, где<#name#>
имя, которое Ваш код Objective C будет использовать для ссылки на класс Swift. Для получения дополнительной информации о@objc
, посмотрите Swift Соответствие типов.
Как Вы работаете
Можно установить класс Swift, чтобы интегрировать поведение Objective C путем разделения на подклассы классов Objective C, принятия протоколов Objective C и т.д. Для получения дополнительной информации, видеть Swift Записи Классы с Поведением Objective C.
Поскольку Вы работаете с Objective C APIs, необходимо будет знать, как Swift переводит определенные функции языка Objective C. Для получения дополнительной информации посмотрите Взаимодействие с Objective C APIs.
При записи Кода SWIFT, включающего платформы Какао, помните, что определенные типы соединяются мостом, что означает, что можно работать с типами Swift вместо типов Objective C. Для получения дополнительной информации посмотрите Работу с Типами данных Какао.
Поскольку Вы включаете образцы Какао в свой класс Swift, посмотрите Принятие Шаблонов разработки Какао для получения информации о переводе общих шаблонов разработки.
Для соображений при переводе Ваших свойств от Objective C до Swift считайте Свойства в Swift Язык программирования.
Используйте
@objc(<#name#>)
атрибут для обеспечения Objective C называет для свойств и методов при необходимости. Например, можно отметить вызванное свойствоenabled
назвать метода getisEnabled
в Objective C как это:Swift
var enabled: Bool {
@objc(isEnabled) get {
/* ... */
}
}
Обозначьте экземпляр (
-
) и класс (+
) методы сfunc
иclass func
, соответственно.Объявите простые макросы как глобальные константы и переведите сложные макросы в функции.
После окончания
Обновите операторов импорта в своем коде Objective C (к
#import "ProductModuleName-Swift.h"
), как описано в Импорте Кода из Того же Приложения Target.Удалите исходный Objective C
.m
файл от цели путем снятия целевого флажка членства. Не удаляйте.m
и.h
файлы сразу; используйте их для поиска и устранения неисправностей.Обновите свой код для использования имени класса Swift вместо имени Objective C, если Вы дали классу Swift другое имя.
Советы по устранению неисправностей и напоминания
Даже при том, что каждый опыт миграции отличается в зависимости от Вашей существующей кодовой базы, существуют некоторые общие шаги и инструменты, чтобы помочь Вам диагностировать свою миграцию кода:
Помните, что Вы не можете разделить класс Swift на подклассы в Objective C. Поэтому класс, который Вы перемещаете, не может иметь никаких подклассов Objective C в Вашем приложении.
Как только Вы перемещаете класс Swift, необходимо удалить соответствие
.m
файл от цели прежде, чем создать для предотвращения двойной ошибки символа.Чтобы быть доступным и применимым в Objective C, класс Swift должен быть потомком класса Objective C, или это должно быть отмечено
@objc
.При обеспечении Кода SWIFT в Objective C помните, что Objective C не будет в состоянии перевести определенные функции, которые являются определенными для Swift. Для списка посмотрите Используя Swift от Objective C.
Щелчок команды имя класса Swift для наблюдения его сгенерированного заголовка.
Щелчок опции символ для наблюдения неявной информации об этом, как ее тип, атрибуты и комментарии для документации.