Как получить доступ к расширению 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)
}
}