Трудности конвертации в Swift 3

После преобразования из Swift 2 в Swift 3 (даже после преобразования edit-> convert -> в текущий синтаксис Swift) я получаю много ошибок. Особенно:

это

Мне показывают всего 90 ошибок для моего проекта, который отлично работал в Swift 2, прежде чем я загрузил эту бета-версию Xcode 8.0 и преобразовал ее в Swift 3.

Это ошибка преобразования, которую я делаю?


person niravdesai21    schedule 21.06.2016    source источник
comment
@EricD Я хочу знать, правильный ли метод преобразования кода, который я использую, edit-> convert -> в текущий синтаксис Swift. Если есть лучший метод, то просто помочь мне с этим. это все, что я просил.   -  person niravdesai21    schedule 21.06.2016
comment
@ niravdesai21 Да, это правильная команда. Эта команда выполняет большую часть работы, но все остальное вы сделаете сами. Xcode — это просто IDE, а не волшебная штука. :) Прочитайте документы Swift 3, если вы запутались с изменениями.   -  person Eric Aya    schedule 21.06.2016
comment
Кроме того, возможно, что преобразование работало неправильно. Попробуйте преобразовать его еще раз, даже если он выдает предупреждение о том, что файл уже был преобразован в Swift 3.   -  person Pranav Wadhwa    schedule 07.10.2016
comment
У меня было более 100 ошибок, когда я конвертировал. Приходите, чтобы узнать, что около 80% ошибок были устранены, когда я обновил свои библиотеки. В частности, я использовал Swifty JSON. Я загрузил последнюю версию файла и вуаля, с остальным можно было справиться пошагово через код.   -  person DG7    schedule 04.08.2017


Ответы (3)


Большинство из них легко исправить, просто нажав красную кнопку, и Xcode исправит это за вас! Другие включают:

CGRect

Свифт 2:

let frame = CGRectMake(0, 0, 20, 20)

Свифт 3:

let frame = CGRect(x: 0, y: 0, width: 20, height: 20)

CGPoint

Свифт 2:

let point = CGPointMake(0, 0)

Свифт 3:

let point = CGPoint(x: 0, y: 0)

CGSize

Свифт 2:

let size = CGSizeMake(20, 20)

Свифт 3:

let size = CGSize(width: 20, height: 20)

CGRectGetMidX

Свифт 2:

CGRectGetMidX(view)

Свифт 3:

view.midX

CGRectGetMidY

Свифт 2:

CGRectGetMidY(view)

Свифт 3:

view.midY

UIColor

Свифт 2:

let color = UIColor.redColor()

Свифт 3:

let color = UIColor.red

"NS"

Свифт 2:

NSTimer
NSData
NSError

Свифт 3:

Timer
Data
Error

Пользовательские настройки по умолчанию

Свифт 2:

NSUserDefaults.standardUserDefaults().//something

Свифт 3:

UserDefaults.standard.//something
person Pranav Wadhwa    schedule 21.06.2016
comment
Это мне очень помогло, пока я работал, я обнаружил еще одно повторяющееся изменение CGRectGetMidX && CGRectGetMidY Swift 2: CGRectGetMidX(object) || CGRectGetMidY(объект) Swift 3: object.midX || объект.midY - person Tyler Hack; 29.12.2016
comment
Спасибо @TylerHack, я включу это в свой ответ. Рад помочь! - person Pranav Wadhwa; 29.12.2016
comment
у меня есть сотни CGRectMake и т. д., как это легко изменить? может и по регулярному выражению, но и так довольно опасно - person nights; 20.02.2017
comment
@nights попробуйте преобразовать его снова. Я считаю, что преобразование по умолчанию исправит это. - person Pranav Wadhwa; 20.02.2017
comment
пробовал сто раз и ничего не конвертирует :[ теперь вношу изменения вручную...считаю дни - person nights; 22.02.2017
comment
Также размер, точка и прямоугольник со значениями 0, это можно сделать так. - person Vitya Shurapov; 20.07.2017
comment
пусть размер = CGSize.zero, пусть точка = CGPoint.zero, пусть rect = CGRect.zero - person Vitya Shurapov; 20.07.2017

И всегда не забывайте использовать полезную функцию «Исправить все в области видимости», которую можно найти в меню «Редактор» -> «Исправить все в области видимости».

person Sierra101    schedule 12.10.2016

Я преобразовывал проект, и Xcode не помогал мне с какими-либо исправлениями, поэтому я прибегнул к паре поиска и замены регулярных выражений: -

CGPointMake\((.*),[ ]*([^\)]+)\)
CGPoint(x:$1, y:$2)

CGSizeMake\((.*),[ ]*([^\)]+)\)
CGSize(width:$1, height:$2)

Обратите внимание, что они не знают о вложенных скобках, но, вероятно, этого достаточно для 90% случаев.

person Echelon    schedule 03.01.2017