Подтвердить что ты не робот

Swift convert Диапазон <Int> до [Int]

как преобразовать диапазон в массив

Я пробовал:

let min = 50
let max = 100
let intArray:[Int] = (min...max)

получить ошибку Range<Int> is not convertible to [Int]

Я также пробовал:

let intArray:[Int] = [min...max]

и

let intArray:[Int] = (min...max) as [Int] 

они тоже не работают.

4b9b3361

Ответ 1

Вам нужно создать Array<Int>, используя Range<Int>, а просто бросить его.

let intArray: [Int] = Array(min...max)

Ответ 2

Поместите диапазон в init.

let intArray = [Int](min...max)

Ответ 3

делать:

let intArray = Array(min...max)

Это должно работать, потому что Array имеет инициализатор, принимающий SequenceType, а Range соответствует SequenceType.

Ответ 4

Я понял:

let intArray = [Int](min...max)

Предоставление кредита кому-то другому.

Ответ 5

Используйте map

let min = 50
let max = 100
let intArray = (min...max).map{$0}

Ответ 6

Интересно, что вы не можете (по крайней мере, с Swift 3 и Xcode 8) напрямую использовать объект Range<Int>:

let range: Range<Int> = 1...10
let array: [Int] = Array(range)  // Error: "doesn't conform to expected type 'Sequence'"

Поэтому, как уже упоминалось ранее, вам нужно вручную "разворачивать" вас, например:

let array: [Int] = Array(range.lowerBound...range.upperBound)

I.e., вы можете использовать только литерал.

Ответ 7

Так как Swift 3/Xcode 8 существует тип CountableRange, который может быть полезен:

let range: CountableRange<Int> = -10..<10
let array = Array(range)
print(array)
// prints: 
// [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Он может использоваться непосредственно в циклах for - in:

for i in range {
    print(i)
}