2016-03-11 28 views
10

Vorrei impostare un'istruzione switch che verifichi un valore se NSIndexPath. NSIndexPath è una classe e si compone (tra l'altro) della sezione e la riga (indexPath.row, indexPath.section)switch che controlla la riga NSIndexPath e la sezione

questo è come vorrei formulare un'istruzione if per verificare la presenza di una riga e una sezione al tempo stesso:

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

Cos'è la traduzione di un cambio rapido per questo?

+0

Forse utile: http://stackoverflow.com/questions/30189505/missing-return-uitableviewcell. –

risposta

18

Un modo (questo funziona perché NSIndexPaths stessi sono equatable):

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

Oppure si potrebbe confrontare con numeri interi, utilizzando un modello di tuple:

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

Un altro trucco è quello di utilizzare switch true e la stessa condizione che stai già utilizzando:

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

Personalmente, vorrei usare nestedswitch dichiarazioni in cui testiamo contro indexPath.section all'esterno e indexPath.row all'interno.

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

Sono d'accordo con il tuo approccio annidato preferito, ma il secondo potrebbe anche essere fatto come un 'switch (indexPath.row, indexPath.section) {case (0,0): ...' –

+0

@MartinR D'Oh! Sono, tipo, il signor Tuple e ho ancora lasciato cadere la palla su quello. – matt

+1

Il secondo approccio sembra semplicemente fantastico. Grazie! – brumbrum

6

Basta usare IndexPath anziché NSIndexPath e procedere come segue:

Testata su Swift 3 e 4:

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

Il primo intero è il section, il secondo è il row.

+0

Esattamente quello che stavo cercando, grazie! –