2016-03-11 5 views
10

Ich möchte eine switch-Anweisung festlegen, die auf einen Wert überprüft, wenn NSIndexPath. NSIndexPath eine Klasse ist, und es besteht (unter anderem) von Abschnitt und Zeile (indexPath.row, indexPath.section)Schalter, der die Zeile und den Abschnitt von NSIndexPath überprüft

dies, wie ich würde formuliert eine if-Anweisung für eine Zeile und einen Abschnitt zur gleichen Zeit zu überprüfen:

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

Was ist swift switch Übersetzung dafür?

+0

Vielleicht nützlich: http://stackoverflow.com/questions/30189505/missing-return-guidableviewcell. –

Antwort

18

Ein Weg (dies funktioniert, weil NSIndexPaths selbst gleichzusetzen sind):

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

Oder Sie könnten nur gegen ganze Zahlen testen, ein Tupel Muster mit:

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

Ein weiterer Trick ist switch true zu verwenden und die gleiche Bedingung, die Sie bereits verwenden:

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

Persönlich würde ich verwenden verschachtelteswitch Aussagen, wo wir gegen indexPath.section auf der Außenseite und indexPath.row auf der Innenseite testen.

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

Ich stimme Ihrem bevorzugten geschachtelten Ansatz zu, aber der zweite könnte auch als 'switch (indexPath.row, indexPath.section) {case (0,0): ...' –

+0

@MartinR D'Oh! Ich bin Mr. Tuple und habe den Ball immer noch fallen lassen. – matt

+1

Der zweite Ansatz sieht einfach gut aus. Vielen Dank! – brumbrum

6

Gerade IndexPath anstelle von NSIndexPath verwenden und die folgenden Schritte aus:

in Getestete Swift 3 und 4:

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

Die erste ganze Zahl ist, die section, die zweite ist die row.

+0

Genau das, was ich gesucht habe, danke! –