Тип 'Double' не имеет члена 'random' - PullRequest
0 голосов
/ 30 марта 2019

Я довольно новичок в разработке 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);

Но я продолжаю получать сообщение об ошибке

Тип 'Double' не имеет члена 'random'

1 Ответ

2 голосов
/ 30 марта 2019

Если вы используете Xcode 9, вы не можете использовать .random(in:), который был представлен в Xcode 10. Вместо этого используйте 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)
...