【问题标题】:Swift Random Color GeneratorSwift 随机颜色生成器
【发布时间】:2015-11-07 01:43:08
【问题描述】:

我正在制作一个游戏,其中有一个正方形网格,其中一个是不同的颜色(所有颜色都是绿松石色)。我正在使用一个函数来生成两种不同的随机颜色

func generateColors() -> (main: UIColor, diff: UIColor) {

    let redMain: CGFloat = CGFloat(arc4random(104.0))
    let greenMain: CGFloat = redMain + 105
    let blueMain: CGFloat = redMain + 83

    let redColorMain: CGFloat = redMain / 255.0
    let greenColorMain: CGFloat = greenMain / 255.0
    let blueColorMain: CGFLoat = blueMain / 255.0
    let main = UIColor(red: redColorMain, green: greenColorMain, blue: blueColorMain, alpha: 0.8)

    let redDiff: CGFloat = CGFloat(arc4random(104.0))
    let greenDiff: CGFloat = redDiff + 105
    let blueDiff: CGFloat = redDiff + 83

    let redColorDiff: CGFloat = redDiff / 255.0
    let greenColorDiff: CGFloat = greenDiff / 255.0
    let blueColorDiff: CGFloat = blueDiff / 255
    let diff = UIColor(red: redColorDiff, green: greenColorDiff, blue: blueColorDiff, alpha: 0.8)

    return (main, diff)
}

但是,我不断收到一条错误消息,提示“Cannot invoke arc4random with a argument type 'Double'”。为什么会这样说,你知道怎么解决吗?谢谢!

【问题讨论】:

  • 粗略搜索告诉我 arc4randkm 使用整数,而不是双精度数。
  • @Jongware arc4randkm?

标签: swift double uicolor cgfloat type-conversion


【解决方案1】:

试试这样:

func generateColors() -> (main: UIColor, diff: UIColor) {

    let redMain: CGFloat = CGFloat(arc4random_uniform(104))
    let greenMain: CGFloat = redMain + 105.0
    let blueMain: CGFloat = redMain + 83.0

    let redColorMain: CGFloat = redMain / 255.0
    let greenColorMain: CGFloat = greenMain / 255.0
    let blueColorMain: CGFloat = blueMain / 255.0
    let main = UIColor(red: redColorMain, green: greenColorMain, blue: blueColorMain, alpha: 0.8)

    let redDiff: CGFloat = CGFloat(arc4random_uniform(104))
    let greenDiff: CGFloat = redDiff + 105.0
    let blueDiff: CGFloat = redDiff + 83.0

    let redColorDiff: CGFloat = redDiff / 255.0
    let greenColorDiff: CGFloat = greenDiff / 255.0
    let blueColorDiff: CGFloat = blueDiff / 255.0
    let diff = UIColor(red: redColorDiff, green: greenColorDiff, blue: blueColorDiff, alpha: 0.8)

    return (main, diff)
}

【讨论】: