标题几乎说明了一切。
我有一个函数可以生成随机RGB值,并将其转换为颜色。
我只想要特定亮度范围内的颜色,所以我使用while循环来创建RGB值,然后检查亮度的想法是我希望它保持循环,直到它在亮度范围内生成颜色。 / p>
我的问题是我无法弄清楚如何从while循环中获取数据以用作整体功能的一部分
编辑: 下面的代码不起作用,while循环没有返回randomcolor的值,Xcode只是给出一个错误,说明它在初始化之前被使用。即使我将return语句移动到for循环中,我只是得到一个错误的整体语句建议我没有返回UIcolor。我想要做的是从while循环中获取颜色值,以便它可以在while循环之外使用。
func randomColor() -> UIColor{
var randomRed:CGFloat
var randomGreen:CGFloat
var randomBlue: CGFloat
var randomcolor: UIColor
var lum: CGFloat = 0.0
while lum < 50.0 {
randomRed = CGFloat(arc4random_uniform(256))
randomGreen = CGFloat(arc4random_uniform(256))
randomBlue = CGFloat(arc4random_uniform(256))
lum = sqrt(randomRed * randomRed * 0.241 + randomGreen * randomGreen * 0.691 + randomBlue * randomBlue * 0.068)
if lum > 50.0{
let color = rC(randomRed: randomRed, randomBlue: randomBlue, randomGreen: randomGreen)
randomcolor = color
}
}
return randomcolor
}
答案 0 :(得分:2)
您的问题是您在函数的开头声明了变量,但没有初始化它们。将在randomcolor
循环内为它们分配一个值,但循环可能会执行零次,导致lum
在您尝试保留之前未初始化。
现在,您和我可以查看此代码并看到while
初始化为0,因此if
将至少执行一次,但Swift不会那样工作。它只是看到唯一的赋值在条件块内,所以它会被沮丧。
您可以通过删除func randomColor() -> UIColor {
var randomRed:CGFloat = 0.0
var randomGreen:CGFloat = 0.0
var randomBlue:CGFloat = 0.0
var lum: Float = 0.0
while lum < 50.0 {
randomRed = CGFloat(Float(arc4random_uniform(256)))
randomGreen = CGFloat(arc4random_uniform(256))
randomBlue = CGFloat(arc4random_uniform(256))
lum = Float(sqrt(randomRed * randomRed * 0.241 + randomGreen * randomGreen * 0.691 + randomBlue * randomBlue * 0.068))
}
return rC(randomRed: randomRed, randomBlue: randomBlue, randomGreen: randomGreen)
}
语句来简化代码:
Roll_Click
答案 1 :(得分:1)
您也可以在true时使用repeat,只有在满足条件时才返回颜色。
注意:我使用UIColor来说明方法:
extension UIColor {
static var random: UIColor {
repeat {
let red = CGFloat(arc4random_uniform(256))
let green = CGFloat(arc4random_uniform(256))
let blue = CGFloat(arc4random_uniform(256))
if sqrt( pow(red, 2) * 0.241 + pow(green, 2) * 0.691 + pow(blue, 2) * 0.068) > 50 {
return UIColor(red: red / 255, green: green / 255, blue: blue / 255, alpha: 1)
}
} while true
}
}
用法:
let color1: UIColor = .random // r 0.894 g 0.757 b 0.192 a 1.0
let color2: UIColor = .random // r 0.133 g 0.357 b 0.824 a 1.0
let color3: UIColor = .random // r 0.675 g 0.875 b 0.278 a 1.0
let color4: UIColor = .random // r 0.867 g 0.184 b 0.533 a 1.0