Обновление 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 не конвертирует это автоматически, когда я конвертирую код в текущий синтаксис Swift...

3 ответа

Решение

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

Правка > Конвертировать > В последний синтаксис Swift...

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

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

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

Возможно, самое простое решение - просто переопределить функции, которые Apple забрала. Пример:

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

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

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

Другие вопросы по тегам