Как переключить приложения с Objective-C на Swift
- Мобильный
- 7 мая 2018 г.
Мы знаем, что в разработке приложений для iOS есть два основных языка программирования: Objective-C и Swift.
Хотя Swift появился намного позже по сравнению с Objective-C (в 2014 году), но он обогнал своего аналога, став фаворитом разработчиков iOS.
Это в основном связано с тем, что он предлагает широкий спектр преимуществ, таких как написание меньшего количества кодов, меньшее обслуживание приложений, ускорение процесса разработки приложений, несколько ошибок и сбоев, сильный с точки зрения безопасности и многое другое.
Если вы работали над Objective-C, то самое время перейти на Swift.
Многие из популярных приложений для iOS, таких как Yahoo, LinkedIn, Lyft, Weather и т. Д., Уже успешно прошли путь от Objective-C до Swift.
Читайте также: Свифт против Цели-С: Давайте узнаем, кто победитель
Как начать с конверсии
Одним из важных моментов, который необходимо учитывать, является обеспечение использования новейшего кода Objective-C.
С помощью современного конвертера Objective-C Xcode позволяет реализовать соответствующие макросхемы enum, изменять идентификатор на энпритип везде, где это возможно. Также помогает обновлять новейший синтаксис @property.
Разработчики приложений iOS должны проявлять некоторую осторожность, поскольку конвертер не будет представлять семантику кода.
Но это поможет вам в обнаружении и использовании механики потенциальных изменений. Таким образом, желательно проверить все вручную, а затем перейти к изменениям.
Если вы используете современный конвертер Objective-C, выполните следующие действия:
Редактировать → Преобразовать → Современному объектно-с-синтаксису.
Преобразуйте один класс за раз
Вы должны помнить, что вы не можете конвертировать все коды сразу из Objective-C в Swift, но вы должны выбрать один класс за раз.
Некоторые классы написаны на Swift, а другие на Objective-C, и вы получаете гибридную цель, как только файл Swift добавляется в целевое приложение Objective-C.
Swift не может иметь подклассы, поэтому вы можете выбрать два файла, а именно заголовок файла, который является .h и содержит раздел @interface и .m файл, который содержит раздел @implementation.
Вам не нужно создавать файл заголовка, так как файл .m импортирует файл .h, если он хочет ссылаться на класс.
Разработка Bridging Header
Xcode предлагает возможность разработать головку моста, как только вы добавили файл Objective-C в Swift или наоборот.

На самом деле, это файл .h, который получил свое имя по умолчанию от цели, и его можно изменить. Но для того, чтобы внести изменение, вам также нужно изменить заголовок подсоединения Objective-C.
Кроме того, если вы #import файл Objective-C.h в заголовке мостика, он становится видимым для Swift.
Проверка Nil Checks
В языке программирования Objective-C, когда сообщение отправляется на нулевой объект, вы в конечном итоге получаете нулевое значение взамен.
Итак, если вы хотите избежать этого или получить нулевое значение, необходимо выбрать нулевые чеки в соответствии с требованиями. Обычно вы получаете его как общее число.
Публичный номер Optional<Wrapped> :_Reflectable, NilLiteralConvertible
В обычном случае вы получаете либо из двух: значение типа Wrapped, либо значение, которого не существует.
Получение обернутой стоимости
С помощью Swift вы также получаете синтаксический сахар для указания типов опционально. Это позволяет вам заменить опциональную <струну> на струну?
Вы можете получить обернутое значение из выборного контейнера с помощью двух методов, включая опциональную цепь и принудительную обертку.
В первом случае используется, если условное высказывание получает значение в случае его существования.
Во втором случае условное утверждение не равно нулю. Если оно содержит переменную, то вы получите результат без применения условий или же оно сломается.
Полностью незавернутый опциональный в Swift известен как струна. Это можно проиллюстрировать на значимом примере:
class ExampleClass {
var nonOptionalString: String
var unwrappedOptionalString: String!
var optionalString: String?
init(string: String) {
nonOptionalString = string
}
}
Ну, вы можете найти три возможности, которые могут прийти на этот момент.
- Первый - это неоптинальная струна, значение которой никогда не будет равно нулю. Она должна содержать переменную, когда объект инициализируется или он разрушится.
- Вторая - это незавернутая опциональная струна, где значение строки равно нулю. Так что, если вы пытаетесь пересечь объект с нулевым значением, программа рухнет.
- Третья — необязательная струна, где строка остается нулевой, но принимается как обычная необязательная переменная.
Поэтому при написании кодов Objective-C лучше классифицировать переменные по двум различным категориям: нульируемые и ненулевые аннотации.
Поэтому ранее указанная иллюстрация будет напоминать что-то вроде этого:
@interface ExampleClass: NSObject @property (nonatomic, strong) NSString * _Nonnull nonOptionalString; @property (nonatomic, strong) NSString *unwrappedOptionalString; @property (nonatomic, strong) NSString * _Nullable optionalString; - (instancetype)initWithString:(nonnull NSString *string); @end
Трубы
Помимо Optionals, Apple также представила новый язык разработки, более известный как Tuples.
Он группирует различные значения в одно сложное значение и является хорошим инструментом, если вы разрабатываете модель в определенном месте и не очень удобен для пользователя.
Расширения
Расширения, доступные на языке Objective-C, объединяются в одно целое в Swift.
Он предлагает новую функциональность для существующего класса, структуры и протокола, и нет необходимости использовать исходный код для расширения типов.
Перечисления
Объектив-С ограничивает перечисления кода только примитивными типами.
Если вы хотите сопоставить значение перечисления целого числа с последующими строками для отображения результата пользователю или отправки на бэкэнд, требуется массив или словарь.
Тем не менее, Swift делает вас комфортно, так как вам не нужно проходить через эти осложнения.
enum ExampleEnum {
case ExOne, ExTwo, ExThree
}
Он может хранить связанные значения, и вы можете хранить необработанные значения в перечислении Swift, используя его, аналогично Objective-C.
enum AnotherExampleEnum {
case ExOne(String, Int)
case ExTwo(Int)
}
Подписка
Подписки в основном используются для получения информации из группы или ассортимента структур классов или перечислений без использования подписчиков.
Подписки помогают восстановить значения по индексу, и поэтому вам не нужно хранить или извлекать.
Элементы в экземпляре Array можно рассматривать как некоторый массив (индекс), а для экземпляра Directory как некоторый словарь (ключ).
Просто следуйте синтаксису:
subscript (index: Int) -> Int {
get {
//for declaring subscript value
}
set (newValue) {
//for defining values
}
}
Типовые последствия
Когда мы фокусируемся на безопасности типов для разработки iOS, это обычно относится к целому числу, которое объявляется с определенным типом.
Его нельзя изменить и он остается фиксированным.Компилятор решает, какой тип переменной будет продолжаться в соответствии с заданным значением.
Например:
var str = "One String" // OR var str2:String Str2 = "Second String"
Если вы пытаетесь начать с размещения значений чисел на переменной str2, компилятор показывает ошибку.
Str2 = 10 //error: Cannot put value of type 'Int' to type 'String'
Функция
Swift предлагает более простой подход, когда дело доходит до синтаксиса функций. Каждая функция содержит тип и тип, содержащие типы параметров функции и тип возврата.
Он позволяет либо выделять функцию переменной, либо передавать ее в качестве значения. Разработчики приложений также могут придавать параметру значение по умолчанию.
Давайте проиллюстрируем это на примере:
func stringCharacterscount (s: String) -> Int
{
return s.characters.count
}
func stringToInt (s: String) -> Int
{
if let a = Int (s)
{
return a
}
return 0
}
func executeSuccessor (f: String -> Int, s: String) -> Int
{
Return f(s). successor()
}
let f1 = stringCharacterscount
let f2 = stringToInt
executeSuccessor (f1, s: "5555") //5
executeSuccessor (f2, s: "5555") //5556
Устранение ошибок
Поэтому, когда вы имеете дело с ошибками в Objective-C, вы должны использовать ссылку на переменную NSError.
Но если такой подход неправильный, нужно разработать экземпляр NSError и написать на пройденную переменную. Нужно проверить параметр ошибки и убедиться, что он не нулевой.
- (nonnull NSString *)exampleMethod:(nonnull NSString *)param error:(NSError **)error {
if (!param.length) {
*error = [NSError errorWithDomain:[NSBundle mainBundle].bundleIdentifier
code:-101
userInfo:nil];
return nil;
}
// do work
}
В случае Swift вы получаете циркулирующие, бросающие, ловящие и манипулирующие ошибки, которые могут быть восстановлены.
Важные моменты, которые следует учитывать при конверсии
- В первую очередь, нужно выбрать пару .h и .m файлов, которые необходимо перенести на язык разработки Swift. Однако, если вы хотите преобразовать весь проект, то лучше покинуть класс AppDelegate.
- Далее, вы должны найти #import «MyViewController.h» из всего кода и удалить файл заголовка для соединения ([MyProject]-Bridging-Header.h).
- После этого пришло время заменить экземпляры #import «MyViewController.h» на форвардное объявление класса: @class MyViewController. Это должно быть сделано для всех файлов .h, поскольку это помогает избежать круговых ссылок между файлами заголовка.
- Переводите пару файлов Objective-C в Swift. Вы можете сделать это с помощью расширения Finder, которое добавляется с помощью Swiftify для Xcode. Кроме того, содержимое как .h, так и .m необходимо скопировать в файл Swift и нажать клавишу Convert the File.
- .h и .m файлы должны быть заменены из проекта преобразованным .swift файлом.
- Следующий шаг — компиляция проекта и исправление ошибок и ошибок в любом. Если вы хотите исправить ошибку, то можете воспользоваться поддержкой команды Editor → Fix All in Scope, доступной в предложениях автофиксации Xcode. В случае повторных ошибок вам необходимо связаться с Swiftify и сообщить об этом.
- Все, что вам нужно сделать, это создать и запустить проект. Если вы столкнетесь с какой-либо проблемой, такой как не найденный класс, и он сломается после этого, вам нужно искать ссылки в редакторе раскадровки. Введите имя класса в инспекторе идентификации, сохраните и попробуйте еще раз.
- Мы сохранили класс AppDelegate напоследок и если конвертировать весь проект, то можно перевести сейчас. Все ваши файлы мигрировали из Objective-C в Swift и поэтому в цели ничего не осталось. Теперь вы можете удалить все файлы.
Заключение
С течением времени Swift стал одним из лучших вариантов для вашего бизнеса. Быстрые разработчики Благодаря новому языку программирования Apple, который предлагает ряд преимуществ перед Objective-C, большинство разработчиков уже решили преобразовать свои приложения из Objective-C в Swift.
Конверсия должна быть сделана очень осторожно, не пропуская ни одного шага. Также верно, что для выполнения этой работы вам нужен опытный профессионал, и поэтому вы можете связаться с нашими экспертами-разработчиками iOS, чтобы помочь вам.




