2016-03-11 1 views
10

Я хотел бы установить оператор switch, который проверяет значение, если NSIndexPath. NSIndexPath класс и состоит (среди прочего) раздела и строки (indexPath.row, indexPath.section), который проверяет строку и раздел NSIndexPath

это, как я сформулировал бы, если заявление для проверки строки и секции одновременно:

if indexPath.section==0 && indexPath.row == 0{ 
//do work 
} 

Что такое быстрый перевод для этого?

+0

Возможно, полезно: http://stackoverflow.com/questions/30189505/missing-return-uitableviewcell. –

ответ

18

Один из способов (это работает, потому что сами NSIndexPaths являются equatable):

switch indexPath { 
case NSIndexPath(forRow: 0, inSection: 0) : // do something 
// other possible cases 
default : break 
} 

Или вы могли бы просто проверить против целых чисел, используя шаблон кортежа:

switch (indexPath.section, indexPath.row) { 
case (0,0): // do something 
// other cases 
default : break 
} 

Еще одна хитрости заключается в использовании switch true и такое же условие, которое вы уже используете:

switch true { 
case indexPath.row == 0 && indexPath.section == 0 : // do something 
// other cases 
default : break 
} 

Лично я бы использовал вложенныеswitch заявления, в которых мы тестируем indexPath.section снаружи и indexPath.row с внутренней стороны.

switch indexPath.section { 
case 0: 
    switch indexPath.row { 
    case 0: 
     // do something 
    // other rows 
    default:break 
    } 
// other sections (and _their_ rows) 
default : break 
} 
+1

Я согласен с вашим предпочтительным вложенным подходом, но второй может также выполняться как 'switch (indexPath.row, indexPath.section) {case (0,0): ...' –

+0

@MartinR D'Oh! Я, вроде, мистер Тюпл, и я все равно бросил мяч на него. – matt

+1

Второй подход выглядит просто отлично. Спасибо! – brumbrum

6

Просто используйте IndexPath вместо NSIndexPath и сделайте следующее:

Испытано в Swift 3 и 4:

switch indexPath { 
case [0,0]: 
    // Do something 
case [1,3]: 
    // Do something else 
default: break 
} 

Первое число является section, второй из них является row.

+0

Точно, что я искал, спасибо! –

Смежные вопросы