ios arrays swift int range

ios - convertir rĂ¡pidamente Range<Int> a



arrays swift (8)

Cómo convertir Range a Array

Lo intenté:

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

obtener el Range<Int> is not convertible to [Int] error Range<Int> is not convertible to [Int]

También probé:

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

y

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

ellos tampoco funcionan.


Debe crear una Array<Int> utilizando el Range<Int> lugar de emitirlo.

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


Desde Swift 3 / Xcode 8 hay un tipo CountableRange , que puede ser útil:

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]

Se puede usar directamente en for - in loops:

for i in range { print(i) }


Es interesante que no pueda (al menos con Swift 3 y Xcode 8) usar el objeto Range<Int> directamente:

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

Por lo tanto, como se mencionó anteriormente, debe "desenvolver" manualmente los rangos como:

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

Es decir, solo puedes usar literal.


Me lo imaginé:

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

Dar crédito a alguien más.


Pon el rango en el init.

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


Puede implementar intervalos de instancia de ClosedRange & Range con reduce () en funciones como esta.

func sumClosedRange(_ n: ClosedRange<Int>) -> Int { return n.reduce(0, +) } sumClosedRange(1...10) // 55


func sumRange(_ n: Range<Int>) -> Int { return n.reduce(0, +) } sumRange(1..<11) // 55


Usar map

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


hacer:

let intArray = Array(min...max)

Esto debería funcionar porque Array tiene un inicializador que toma un SequenceType y Range ajusta a SequenceType .