2015-08-19 4 views

ответ

81

Вы должны создать в Array<Int> с помощью Range<Int>, а не отливать ИНГ его.

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

спасибо, я просто понял, когда вы отправили свой ответ –

10

Я понял это:

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

Отдавая кому-то другому.

7

Использование map

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

, добавив, почему это работает, было бы полезно для людей, которые читают такие вопросы. Например, заявив, что он создает CoutableClosedRange, который реализует протокол Sequence, поэтому карта возможна, и при выполнении операции карты она становится ленивой. Некоторое знание фона всегда хорошо – denis631

21

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

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

сделать:

let intArray = Array(min...max) 

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

1

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

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

+0

Причина этого в том, что диапазоны не являются коллекциями. Различие между диапазоном и счетным диапазоном состоит в том, что последнее можно повторить с помощью значения Integer. По этой причине Countable Range - это тип коллекции в swift, но диапазон - нет. –

+0

Правильно, и я не ожидал этого, т. Е. Двух разных классов диапазона. Вероятно, из-за Pythonic интерпретации 'range()'. – devforfu

1

С 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) 
} 
+0

Это (сейчас) правильный способ обработки задачи. Также работает в Swift 4. – Ash

Смежные вопросы