Быстрое расширение не работает

#ios #swift #xcode6 #objective-c-category

#iOS #быстрый #xcode6 #цель-категория с

Вопрос:

Я добавил расширение к UIColor для некоторых цветов, которые я использую в своем приложении. Вот один из примеров:

 extension UIColor {
    func appLightGrayColor() -> UIColor {
    return UIColor(red: 190.0/255.0, green: 190.0/255.0, blue: 190.0/255.0, alpha: 1.0)
    }

    func grayScaleColor(grayScale : CGFloat) -> UIColor {
    return UIColor(red: grayScale/255.0, green: grayScale/255.0, blue: grayScale/255.0, alpha: 1.0)
    }
}
 

Однако, когда я пытаюсь его вызвать, единственный способ, которым я смог скомпилировать без ошибок, — это:

 UINavigationBar.appearance().barTintColor = UIColor.appLightGrayColor(UIColor())()
 

Вот что я получаю при автозаполнении:

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

Что я делаю не так?

Ответ №1:

Вы добавили метод экземпляра, но на самом деле вам нужен метод класса

 extension UIColor {
    class func appLightGrayColor() -> UIColor {
    return UIColor(red: 190.0/255.0, green: 190.0/255.0, blue: 190.0/255.0, alpha: 1.0)
    }

    class func grayScaleColor(grayScale : CGFloat) -> UIColor {
    return UIColor(red: grayScale/255.0, green: grayScale/255.0, blue: grayScale/255.0, alpha: 1.0)
    }
}
 

Комментарии:

1. 1, кроме того, я предлагаю, чтобы appLightGrayColor() -> UIColor { return UIColor.grayScaleColor(190.0) }

Ответ №2:

Хотя ответ Брайана по-прежнему верен, с выпуском Swift 3 предпочтительный «быстрый» способ ведения дел немного изменился.

В Swift 3 соответственно используются предопределенные UIColors:

 var myColor: UIColor = .white // or .clear or whatever
 

Поэтому, если вы хотите что-то подобное, например, следующее…

 var myColor: UIColor = .myCustomColor
 

… затем вы должны определить расширение следующим образом:

 extension UIColor
    {
    public class var myCustomColor: UIColor
        {
        return UIColor(red: 248/255, green: 248/255, blue: 248/255, alpha: 1.0)
        }
    }
 

Фактически, Apple определяет белый как:

 public class var white: UIColor
 

Комментарии:

1. Говоря о «быстром» способе ведения дел… Разве открывающие фигурные скобки не должны находиться в той же строке, что и оператор? 🙂

2. Не заставляйте меня начинать с этого! Это только превратится в религиозную войну. 🙂

3. ха-ха, я знаю, я знаю — у каждого свой путь: P Я следую чему-то похожему на github.com/raywenderlich/swift-style-guide