类型'双'没有会员'随机'

问题描述 投票:0回答:1

我是IOS开发的新手,我正在尝试使用swift double.random(in:)

这是文档中的示例:

for _ in 1...3 {
    print(Double.random(in: 10.0 ..< 20.0))
}
// Prints "18.1900709259179"
// Prints "14.2286325689993"
// Prints "13.1485686260762"

这是我的代码,我试图生成随机颜色:

UIColor(red: Double.random(in: 1.0 ..< 251.0),
        green: Double.random(in: 1.0 ..< 251.0),
        blue: Double.random(in: 1.0 ..< 251.0),
        aplha: 1);

但我一直得到错误

类型'双'没有会员'随机'

ios swift random double
1个回答
2
投票

如果使用Xcode 9,则不能使用在Xcode 10中引入的.random(in:)。而是使用arc4random_uniform

let color = UIColor(red: CGFloat(arc4random_uniform(250) + 1) / 255, 
                    green: CGFloat(arc4random_uniform(250) + 1) / 255,
                    blue: CGFloat(arc4random_uniform(250) + 1) / 255, 
                    alpha: 1)

我不确定你为什么要从1到251(我显然认为你想要除以255,因为8位通道中的值范围是0 ... 255.当使用arc4random_uniform时,你可以通过提供参数值256:

let color = UIColor(red: CGFloat(arc4random_uniform(256)) / 255, 
                    green: CGFloat(arc4random_uniform(256)) / 255,
                    blue: CGFloat(arc4random_uniform(256)) / 255, 
                    alpha: 1)

请注意上面使用的CGFloat。作为一项规则,UIKit使用CGFloat,而不是Double。所以,如果你使用Xcode 10,你可以这样做:

let color = UIColor(red: CGFloat.random(in: 0...1),
                    green: CGFloat.random(in: 0...1),
                    blue: CGFloat.random(in: 0...1),
                    alpha: 1)

或者你可以利用Swift知道这些参数类型的事实,并让它推断出CGFloat

let color = UIColor(red: .random(in: 0...1),
                    green: .random(in: 0...1),
                    blue: .random(in: 0...1),
                    alpha: 1)
© www.soinside.com 2019 - 2024. All rights reserved.