Обновить CGRectMake для CGRect в Swift 3 автоматически

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

Не уверен, почему Apple не делает это автоматически, когда я конвертирую код в Current Swift Syntax...

Ответ 1

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

Изменить > Преобразовать > в последний синтаксис Swift...

введите описание изображения здесь

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

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

Ответ 2

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

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

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

Ответ 3

Короткий ответ: не делайте этого. Не позволяйте Apple боссу. Я ненавижу 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" везде, и я закончил.