2016-06-22 5 views

ответ

74

Swift 3

IndexSet может быть создано непосредственно из массива буквального использования init(arrayLiteral:), например, так:

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

Оригинала ответ (Swift 2.2)

Подобно pbasdf's answer, но использует 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) 
+0

Спасибо, но если я использую reloadTableSection, это работает в одном разделе? – Bruno

+1

@BrunoFernandes Uh ... Что? – Alexander

2

Вы можете использовать NSMutableIndexSet и его addIndex метода:

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) 
45

Это будет намного проще в Swift 3:

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

Wow!

+0

Выглядит хорошо, не может ждать! – Alexander

+0

Даже лучше, его можно назначить из целых букв. См. Мой ответ – Alexander

+0

@ АлександрМомчлов Отлично, что-то еще лучше. – matt

-1

Как насчет использования Set<Int> с IndexSet is readonly (без возможности добавления новых элементов)?

var set: Set<Int> = [0] 
set.insert(1) 
set.insert(2) 
return set 
+0

IndexSet - не является readonly (неизменным), это зависит от объявления как let или var. Не путайте с NSIndexSet. – vsilux

11

Swift 3

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

Добавлен этот ответ, потому что вариант fromRange еще не было упомянуто.