为 forEach 循环中的每个项目生成随机背景颜色

generate a random background color for each item in forEach loop

我想做的是看看是否有可能在 for each 循环中我可以为每个循环分配随机背景颜色 item.I 尝试了以下内容,但无法编译。我知道有一种方法可以通过在 for each 之外设置一个变量并作为 uicolor 的一部分增加来做到这一点,但我想看看是否有一种方法可以在不创建变量的情况下做到这一点。

   var frontBox = UIButton()
var backBox = UIButton()


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    [frontBox,backBox,slider].forEach{
        [=10=].translatesAutoresizingMaskIntoConstraints = false
        view.addSubview([=10=])
        [=10=].backgroundColor = ar4random().uicolor
    }
    

}

Swift 不再使用 ar4random - 要获得随机数,您可以使用 .random(in: 0...1) or similar.

此外,[=13=].backgroundColor 接受 UIColor,而不是数字。您可能正在寻找这样的东西:

[=10=].backgroundColor = UIColor(
    red: .random(in: 0...1),
    green: .random(in: 0...1),
    blue: .random(in: 0...1),
    alpha: 1
)

这就组成了一个UIColor from red, green, and blue components,每一个都是01之间的一个随机数。

这取决于您希望这些颜色有多“随机”。如果你想要噪音,就按照aheze的建议。

如果你想要一些视觉上吸引人的东西,比如演示一个新的布局,试试这样的东西:

import UIKit

let stackView = UIStackView(frame: CGRect(x: 0,y: 0,width: 600,height: 100))
stackView.distribution = .fillEqually
let collection = 1...100
collection.forEach { i in
    let view = UIView()
    let hue = CGFloat(i) / CGFloat(collection.count)
    view.backgroundColor = UIColor.init(hue: hue, saturation: 1, brightness: 1, alpha: 1)
    stackView.addArrangedSubview(view)
}

关键是在UIColor上使用init(hue:saturation:brightness:alpha:) API并控制hue参数改变颜色
该示例应该为您提供特定用例所需的一切。

游乐场截图: