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.
Asked
Active
Viewed 4.7k times
5 Answers
109
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)
-
Thanks, but if I use to reloadTableSection is it work to one section? – Bruno Oct 18 '16 at 18:32
-
1@BrunoFernandes Uh... What? – Alexander Oct 19 '16 at 01:26
79
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
- 515,959
- 87
- 875
- 1,141
-
Even better, it can be assigned from an Integer Literal. See my answer – Alexander Oct 14 '16 at 18:19
-
-
It is very annoying this can't be seen by typing IndexSet.init and using an autocomplete option. – Sethmr Nov 15 '18 at 15:48
28
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
- 17,268
- 9
- 65
- 83
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
- 21,386
- 4
- 43
- 75