2015-09-08 4 views
0

Я делаю программу, в которой есть два цвета. Первый случайный, в то время как второй - другой оттенок первого. Разница между оттенками определяется переменной 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) 
} 

Основная проблема заключается в том, что я не могу возвращать значения внутри «если» цикла, так что я нужен способ, чтобы иметь возможность вернуть «диф» UIColor и все еще быть в состоянии делать то, что внутри «, если " заявление. Заранее большое спасибо! :)

+0

Пожалуйста, отредактируйте ваш вопрос на каком-то примере, чтобы лучше понять, что вы спрашиваете – EnriMR

ответ

0

Не совсем уверен, что я следую за вами, но если вы хотите, чтобы иметь возможность вернуться diff пройдя через условные операторы, просто объявить его до условного оператора:

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

Если предположить, что вы используете Swift> = 1.2, тогда вы можете объявить неизменяемую переменную и фактически установить ее позже, если условные ветви достаточно просты, чтобы компилятор был уверен, что diff всегда будет инициализирован до того, как он будет впервые использован.

Конечно, в то время как это не так хорошо стилистически, вы можете вернуть либо из if или else так main уже инициализирован, и в обоих случаях вы Инициирование diff, поэтому и вы можете спокойно сделать return (main, diff).

+0

Я использовал другой метод, но спасибо anyways :) –

Смежные вопросы