68

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.

5 Answers 5

110

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)
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, but if I use to reloadTableSection is it work to one section?
@BrunoFernandes Uh... What?
83

This will be a lot easier in Swift 3:

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

Wow!

3 Comments

Even better, it can be assigned from an Integer Literal. See my answer
@AlexanderMomchliov Excellent, that is even better.
It is very annoying this can't be seen by typing IndexSet.init and using an autocomplete option.
29

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.

Comments

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]

Comments

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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.