生成不同的颜色

时间:2015-09-08 23:08:56

标签: swift return uicolor

我正在制作一个有两种颜色的程序。第一个是随机的,而第二个是第一个不同的阴影。阴影之间的差异由变量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”循环中返回值,所以我需要一种方法能够返回UIColor“diff”,并且仍然可以在“if”语句中执行操作。非常感谢提前! :)

1 个答案:

答案 0 :(得分:0)

我不完全确定我在这里关注你,但如果你希望能够在完成条件语句后返回diff,只需在条件语句之前声明它:

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

假设您正在使用Swift&gt; = 1.2,那么您可以声明一个不可变变量并实际设置它,只要条件分支足够简单,编译器就能确保diff始终是在第一次使用之前初始化。

当然,虽然风格不太好,但您实际上可以从ifelse返回,因为main已经初始化,在这两种情况下,您都在初始化{{ 1}},所以两者都可以安全地diff