#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