63

I converted an NSIndexSet to an [Int] array using the answer at https://stackoverflow.com/a/28964059/6481734 I need to do essentially the opposite, turning the same kind of array back into an NSIndexSet.

Community
  • 1
  • 1
Jacolack
  • 1,215
  • 2
  • 9
  • 23

5 Answers5

104

Swift 3

IndexSet can be created directly from an array literal using init(arrayLiteral:), like so:

let indices: IndexSet = [1, 2, 3]

Original answer (Swift 2.2)

Similar to pbasdf's answer, but uses forEach(_:)

let array = [1,2,3,4,5,7,8,10]

let indexSet = NSMutableIndexSet()
array.forEach(indexSet.add) //Swift 3
//Swift 2.2: array.forEach{indexSet.addIndex($0)}

print(indexSet)
Community
  • 1
  • 1
Alexander
  • 48,074
  • 8
  • 78
  • 121
75

This will be a lot easier in Swift 3:

let array = [1,2,3,4,5,7,8,10]
let indexSet = IndexSet(array)

Wow!

matt
  • 447,615
  • 74
  • 748
  • 977
27

Swift 3+

let fromRange = IndexSet(0...10)
let fromArray = IndexSet([1, 2, 3, 5, 8])

Added this answer because the fromRange option wasn't mentioned yet.

Arnaud
  • 15,630
  • 9
  • 57
  • 78
11

Swift 4.2

From existing array:

let arr = [1, 3, 8]
let indexSet = IndexSet(arr)

From array literal:

let indexSet: IndexSet = [1, 3, 8]
jposadas
  • 111
  • 1
  • 2
3

You can use a NSMutableIndexSet and its addIndex method:

let array : [Int] = [1,2,3,4,5,7,8,10]
print(array)
let indexSet = NSMutableIndexSet()
for index in array {
    indexSet.addIndex(index)
}
print(indexSet)
pbasdf
  • 20,407
  • 3
  • 36
  • 65