unexpected non for callbacks swift random colors uicolor func

non - swift variables



Cómo hacer un color aleatorio con Swift (9)

Para Swift 4.2

extension UIColor { static var random: UIColor { return UIColor(red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1), alpha: 1.0) } }

Para Swift 3 y superior:

extension CGFloat { static var random: CGFloat { return CGFloat(arc4random()) / CGFloat(UInt32.max) } } extension UIColor { static var random: UIColor { return UIColor(red: .random, green: .random, blue: .random, alpha: 1.0) } }

Uso:

let myColor: UIColor = .random

¿Cómo puedo hacer una función de color aleatorio usando Swift?

import UIKit class ViewController: UIViewController { var randomNumber = arc4random_uniform(20) var randomColor = arc4random() //Color Background randomly func colorBackground() { // TODO: set a random color view.backgroundColor = UIColor.yellow } }


Con Swift 4.2 , puede simplificar esto utilizando las nuevas funciones aleatorias que se han agregado:

extension UIColor { static func random () -> UIColor { return UIColor( red: CGFloat.random(in: 0...1), green: CGFloat.random(in: 0...1), blue: CGFloat.random(in: 0...1), alpha: 1.0) } }

Hay más detalles here .


Extensión Swift 4.2

extension UIColor { convenience init(red: Int, green: Int, blue: Int) { assert(red >= 0 && red <= 255, "Invalid red component") assert(green >= 0 && green <= 255, "Invalid green component") assert(blue >= 0 && blue <= 255, "Invalid blue component") self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0) } convenience init(rgb: Int) { self.init( red: (rgb >> 16) & 0xFF, green: (rgb >> 8) & 0xFF, blue: rgb & 0xFF ) } static func random() -> UIColor { return UIColor(rgb: Int(CGFloat(arc4random()) / CGFloat(UINT32_MAX) * 0xFFFFFF)) } }

Uso:

let color = UIColor.random()


Haga una función para generar color aleatorio:

func getRandomColor() -> UIColor { //Generate between 0 to 1 let red:CGFloat = CGFloat(drand48()) let green:CGFloat = CGFloat(drand48()) let blue:CGFloat = CGFloat(drand48()) return UIColor(red:red, green: green, blue: blue, alpha: 1.0) }

Ahora, puede llamar a esta función siempre que necesite un color aleatorio.

self.view.backgroundColor = getRandomColor()


Necesitará una función para producir CGFloat s aleatorios en el rango de 0 a 1:

extension CGFloat { static func random() -> CGFloat { return CGFloat(arc4random()) / CGFloat(UInt32.max) } }

Luego puede usar esto para crear un color aleatorio:

extension UIColor { static func random() -> UIColor { return UIColor(red: .random(), green: .random(), blue: .random(), alpha: 1.0) } }

Si quería un alfa aleatorio, simplemente cree otro número aleatorio para eso también.

Ahora puede asignar el color de fondo de su vista de la siguiente manera:

self.view.backgroundColor = .random()


Para colores sólidos aleatorios, puede usar el inicializador UIColor HSB y aleatorizar solo el tono:

extension UIColor { static var random: UIColor { return .init(hue: .random(in: 0...1), saturation: 1, brightness: 1, alpha: 1) } }

let color1: UIColor = .random let color2: UIColor = .random let color3: UIColor = .random let color4: UIColor = .random let color5: UIColor = .random


Usando una extensión con una función en línea para generar randoms

extension UIColor { static func random() -> UIColor { func random() -> CGFloat { return .random(in:0...1) } return UIColor(red: random(), green: random(), blue: random(), alpha: 1.0) } }


Swift 4.2 🔸

Estoy agregando esta respuesta porque usa un enfoque diferente y porque muchas de las respuestas anteriores requieren azúcar sintáctica adicional, que en mi opinión no debería preferirse. Vanilla Swift por la victoria.

extension UIColor { /** * Returns random color * ## Examples: * self.backgroundColor = UIColor.random */ static var random: UIColor { let r:CGFloat = .random(in: 0...1) let g:CGFloat = .random(in: 0...1) let b:CGFloat = .random(in: 0...1) return UIColor(red: r, green: g, blue: b, alpha: 1) } }


func anotherGetRandomColor()->UIColor{ let newRed = arc4random_uniform(255)/255 let newGreen = arc4random_uniform(255)/255 let newBlue = arc4random_uniform(255)/255 return UIColor(red: CGFloat(newRed), green: CGFloat(newGreen), blue: CGFloat(newBlue), alpha: 1.0) }