2016-07-12 2 views
42

Теперь, когда CGRectMake, CGPointMake, CGSizeMake и т. Д. Были удалены в Swift 3.0, есть ли способ автоматически обновлять все инициализации, например, от CGRectMake(0,0,w,h) to CGRect(x:0,y:0,width:w,height:h). Ручной процесс .. довольно боль.Обновление CGRectMake для CGRect в Swift 3 автоматически

Не уверен, почему Apple, не автоматически преобразовать это, когда я преобразовать код в текущий Swift Синтаксис ...

+3

Преобразование в текущий Swift Синтаксис работает для меня и преобразует 'CGRectMake (0,0, w, h)' в 'CGRect (x: 0, y: 0, width: w, height: h)'. Если это не работает в вашем случае, вы должны подать отчет об ошибке. –

ответ

17

Apple действительно предоставляет эту функцию. Все, что вам нужно сделать, это пойти:

Edit>Преобразовать>Для Latest Swift синтаксису ...

enter image description here

А затем следуйте инструкциям на экране.

Это решит ваши проблемы с синтаксисом, и вам не придется создавать новые функции для всех удаленных функций.

+1

это да! по некоторым причинам, когда я впервые конвертировал, некоторые файлы не преобразовывались. Но когда я снова побежал, это случилось! Я думаю, должен работать несколько раз, пока все ваши файлы не будут преобразованы. – yonasstephen

+0

он не делает этого для меня, я не раз и даже после внесения некоторых изменений. – nights

64

Самое простое решение, вероятно, просто переопределить функции Apple, взяли прочь. Пример:

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect { 
    return CGRect(x: x, y: y, width: width, height: height) 
} 

Положи в модуле и все вызовы CGRectMake будет работать снова.

+0

Хмм, это круто! позвольте мне посмотреть, что другие думают; иначе, я буду принимать ваши ответы в качестве ответов! – yonasstephen

+0

Я ждал, когда PaintCode обновится до Swift 3. Со всеми 'CGRectMake' там, это было, безусловно, лучшим решением. –

+0

Почему CGRectMake в первую очередь, если вы можете инициализировать CGRect таким же образом, я не понимаю его. –

28

Короткий ответ: не делайте этого. Не позволяйте Apple боссу. I НенавижуCGRect(x:y:width:height:). Я подал на него ошибку. Я думаю, что инициализатор должен быть CGRect(_:_:_:_:), как и CGRectMake. Я определил расширение на CGRect, которое его поставляет, и переверните это расширение в каждый отдельный проект, который я начинаю.

extension CGRect { 
    init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) { 
     self.init(x:x, y:y, width:w, height:h) 
    } 
} 

Таким образом, все, что нужно сделать, это изменить «CGRectMake» в «CGRect» везде, и я сделал.

+1

Спасибо за этот полезный ответ ... Вы спасли мое время. –

+0

Где я могу добавить это расширение? скорее, как я его использую? спасибо – nights

+0

@nights, вне любого класса –