Как получить доступ к расширению UIColor в SWIFT?

Я очень новичок в быстрой и пытается создать расширение класса UIColor как

extension UIColor{

    func getCustomBlueColor() -> UIColor{

    return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)

    }

После этого я обратился к методу как

btnShare.setTitleColor(UIColor.getCustomBlueColor(**UIColor**), forState: UIControlState.Normal)

Я не знаю, что мне следует передать в качестве аргумента для этого утверждения.

Ответы

Ответ 1

Вы определили метод экземпляра, что означает, что вы можете позвонить это только на экземпляре UIColor:

let col = UIColor().getCustomBlueColor()
// or in your case:
btnShare.setTitleColor(UIColor().getCustomBlueColor(), forState: .Normal)

Ошибка компилятора "отсутствующий аргумент" возникает, потому что Методы экземпляров - это Curried Functions в Swift, поэтому его можно было бы условно назвать

let col = UIColor.getCustomBlueColor(UIColor())()

(Но это было бы странно, и я добавил его только к объясните, откуда приходит сообщение об ошибке.)


Но вам действительно нужен метод типа (class func)

extension UIColor{
    class func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}

который называется

let col = UIColor.getCustomBlueColor()
// or in your case:
btnShare.setTitleColor(UIColor.getCustomBlueColor(), forState: .Normal)

без необходимости создания экземпляра UIColor.

Ответ 2

С 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

Ответ 3

Свифт 3, Свифт 4:

extension UIColor {
   static let myBlue = UIColor(red:0.043, green:0.576 ,blue:0.588, alpha:1.00) 
}

Использование:

btnShare.setTitleColor(.myBlue, for: .normal)

Или же

self.view.backgroundColor = .myBlue

Ответ 4

Вам просто нужно изменить свой оператор, например,

 btnShare.setTitleColor(UIColor().getCustomBlueColor(), forState:.Normal)

Более подробное объяснение здесь.

Ответ 5

Вы определили функцию экземпляра. Это означает, что вам нужен экземпляр UIColor в случае использования getCustomBlueColor() -метода.

Похоже, вы хотите иметь метод класса, а не метод экземпляра. Поэтому вы должны изменить свое определение следующим образом:

extension UIColor{
    class func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}

Обратите внимание на "класс" перед func, поэтому метод теперь доступен как метод класса.

Та же история с использованием методов класса в структуре:

struct MyColors{
    static func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}
let color = MyColors.getCustomBlueColor()

Если вы просто хотите иметь класс с некоторыми определениями цветов, я рекомендую использовать структуру над классом или расширением:

struct MyColors{
    static var getCustomBlueColor = { return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00) }
}
let color = MyColors.getCustomBlueColor()

Ответ 6

Можно использовать вычисленное свойство:

extension UIColor {
  var customBlueColor: UIColor {
    return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
  }
}

И затем назовем это:

UIColor().customBlueColor

Ответ 7

Swift:

extension UIColor {
    open class var yourOrange: UIColor {
        return UIColor.init(colorLiteralRed: 0.988, green: 0.337, blue: 0.063, alpha: 1)
    }
} 

Ответ 8

Получить это расширение для настройки типа UIView

extension UIColor {
    // Method returns a custom color
    static func rgb(red: CGFloat, green: CGFloat, blue: CGFloat) -> UIColor {
        return .init(red: blue / 255, green: green / 255, blue: blue / 255, alpha: 1.0)
    }
}