Если вы получаете эту ошибку, то, вероятно, вы используете Swift 4.2, который поставляется с новым случайным API .Ошибка возникает из-за того, что компилятор считает, что вы пытаетесь обратиться к новому статическому random(in:)
методу FixedWidthInteger
, которому соответствует Int
(тот факт, что он игнорирует глобальную функцию это известная ошибка ).
Чтобы сгенерировать случайное значение Int
от 0 до (но не включая) заданной верхней границы n
, теперь вы можете просто сказать:
let i = Int.random(in: 0 ..< n)
См. вышеупомянутое связанное предложение для получения дополнительной информации о новом случайном API.
Учитывая, насколько простым является новый API, я бы сказал, что нет необходимости реализовыватьобычай
init?(randomBelow:)
.Однако, если вы все еще хотите, вы можете реализовать его следующим образом:
extension Int {
/// Initializes a new `Int ` instance with a random value below a given `Int`.
///
/// - Parameters:
/// - randomBelow: The upper bound value to create a random value with.
public init?(randomBelow upperLimit: Int) {
guard upperLimit > 0 else { return nil }
self = .random(in: 0 ..< upperLimit)
}
}
Новый случайный API является кроссплатформенным, поэтому теперь нет необходимости выполнять какую-либо условную компиляцию.