生成不同的颜色

Generate Different Colors

我正在制作一个程序,其中有两种颜色。第一个是随机的,而第二个是与第一个不同的阴影。色调之间的差异由变量 colorDiff 决定。

func generateColors() -> (main: UIColor, diff: UIColor) {
    let colorDiff = findColorDiff()

    let redMain: CGFloat = CGFloat(arc4random_uniform(255))/255.0
    let greenMain: CGFloat = CGFloat(arc4random_uniform(255))/255.0
    let blueMain: CGFloat = CGFloat(arc4random_uniform(255))/255.0
    let main: UIColor = UIColor(red: redMain, green: greenMain, blue: blueMain, alpha: 0.8)

    if (redMain + colorDiff <= 255 && blueMain + colorDiff <= 255 && greenMain + colorDiff <= 255) {
        let redDiff: CGFloat = redMain + colorDiff
        let blueDiff: CGFloat = blueMain + colorDiff
        let greenDiff: CGFloat = greenMain + colorDiff
        let diff: UIColor = UIColor(red: redDiff, green: greenDiff, blue: blueDiff, alpha: 0.8)
        return diff
    } else {
        let redDiff: CGFloat = redMain - colorDiff
        let blueDiff: CGFloat = blueMain - colorDiff
        let greenDiff: CGFloat = greenMain - colorDiff
        let diff: UIColor = UIColor(red: redDiff, green: greenDiff, blue: blueDiff, alpha: 0.8)
        return diff
    }

    return (main, diff)
}

主要问题是我无法从 "if" 循环中 return 值,所以我需要一种方法能够 return UIColor "diff" 和仍然能够执行 "if" 语句中的操作。非常感谢! :)

不完全确定我在这里跟随你,但如果你想在完成条件语句后能够return diff,只需在条件语句之前声明它:

let main: UIColor = [...]
let diff: UIColor
if [...] {
    [...]
    diff = [...]
} else {
    [...]
    diff = [...]
}
return diff

假设您正在使用 Swift >= 1.2 那么您可以声明一个不可变变量并在以后实际设置它,只要条件分支足够简单让编译器确保 diff 总是会在第一次使用前被初始化。

当然,虽然它在风格上不太好,但实际上您可以从 ifelse return 因为 main 已经初始化并且在两者中在您初始化 diff 的情况下,因此在这两种情况下您都可以安全地执行 return (main, diff).