стремительные преобразования диапазона [Инт]



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



пробовал:



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] 


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

685   7  

7 ответов:

вам нужно создать an Array<Int> С помощью Range<Int>, а не casting его.

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

поместите диапазон в инициализацию.

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

Я понял это:

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

отдавая должное кому-то еще.

do:

let intArray = Array(min...max)

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

использовать map

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

интересно, что вы не можете (по крайней мере, с 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)

то есть, ты можете использовать только буквальное.

так как 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)
}

Comments

    Ничего не найдено.