from color change bar ios swift extension-methods uicolor

ios - change - uicolor from hex swift 4



¿Cómo acceder a la extensión de UIColor en SWIFT? (7)

Con Swift 3, UIColors predefinidos se utilizan en consecuencia:

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

Por lo tanto, si quieres algo similar, como el siguiente ...

var myColor: UIColor = .myCustomColor

... entonces, definirías la extensión así:

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

De hecho, Apple define el blanco como:

public class var white: UIColor

Soy muy nuevo en Swift y estoy tratando de crear una extensión de clase UIColor como

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

Después de esto accedí al método como

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

No sé lo que debería pasar como un argumento a esta declaración.


Ha definido un método de instancia , lo que significa que puede llamarlo solo en una instancia de UIColor :

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

El "argumento faltante" del error del compilador se produce porque los métodos de instancia son funciones en curry en Swift , por lo que podría llamarse de manera equivalente como

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

(Pero eso sería algo extraño, y lo he agregado solo para explicar de dónde proviene el mensaje de error).

Pero lo que realmente quieres es un método de tipo ( class func )

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

que se llama como

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

sin la necesidad de crear una instancia de UIColor primero.


Podría usar una propiedad computada:

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

Y luego llamarlo:

UIColor().customBlueColor


Solo necesitas cambiar tu estado de cuenta como,

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

Una explicación más detallada está here .


Swift 3, Swift 4

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

Utilizar:

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

O

self.view.backgroundColor = .myBlue


Usted definió una función de instancia. Significa que necesita una instancia de UIColor en caso de que utilice el método getCustomBlueColor() .

Parece que desea tener un método de clase, en lugar del método de instancia. Así que tienes que cambiar tu definición de esta manera:

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

Tenga en cuenta la ''clase'' antes de la función, por lo que ahora se puede acceder al método como un método de clase.

La misma historia usando métodos de clase en una estructura:

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

Si solo quieres tener una clase con algunas definiciones de color, te recomiendo que uses una estructura sobre una clase o extensión:

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


Rápido:

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