Ответ 1
Вам нужно создать Array<Int>
, используя Range<Int>
, а просто бросить его.
let intArray: [Int] = Array(min...max)
как преобразовать диапазон в массив
Я пробовал:
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]
они тоже не работают.
Вам нужно создать Array<Int>
, используя Range<Int>
, а просто бросить его.
let intArray: [Int] = Array(min...max)
Поместите диапазон в init.
let intArray = [Int](min...max)
делать:
let intArray = Array(min...max)
Это должно работать, потому что Array
имеет инициализатор, принимающий SequenceType
, а Range
соответствует SequenceType
.
Я понял:
let intArray = [Int](min...max)
Предоставление кредита кому-то другому.
Используйте map
let min = 50
let max = 100
let intArray = (min...max).map{$0}
Интересно, что вы не можете (по крайней мере, с 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., вы можете использовать только литерал.
Так как 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)
}