NSIndexPath
の場合に値をチェックするswitchステートメントを設定したいと思います。 NSIndexPath
はクラスであり、(とりわけ)セクションと行で構成されます(indexPath.row, indexPath.section
)
これは、行とセクションを同時にチェックするifステートメントを作成する方法です。
if indexPath.section==0 && indexPath.row == 0{
//do work
}
Swiftこのためのスイッチ変換とは何ですか?
1つの方法(NSIndexPath自体が同等であるため、これは機能します):
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
}
もう1つのトリックは、switch true
を使用し、すでに使用しているのと同じ条件を使用することです。
switch true {
case indexPath.row == 0 && indexPath.section == 0 : // do something
// other cases
default : break
}
個人的には、nestedswitch
ステートメントを使用して、外側の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
}
IndexPath
の代わりにNSIndexPath
を使用して、次の手順を実行します。
Swift 3および4でテスト済み:
switch indexPath {
case [0,0]:
// Do something
case [1,3]:
// Do something else
default: break
}
最初の整数はsection
で、2番目の整数はrow
です。
編集:
上記のこの方法は、マットの答えのタプルマッチング方法ほど強力ではないことに気づきました。
Tupleでそれを行う場合、次のようなことができます。
switch (indexPath.section, indexPath.row) {
case (0...3, let row):
// this matches sections 0 to 3 and every row + gives you a row variable
case (let section, 0..<2):
// this matches all sections but only rows 0-1
case (4, _):
// this matches section 4 and all possible rows, but ignores the row variable
break
default: break
}
可能なswitch
ステートメントの使用法の完全なドキュメントについては、 https://docs.Swift.org/Swift-book/LanguageGuide/ControlFlow.html を参照してください。
別の方法は、switch
とif case
を組み合わせることです。
switch indexPath.section {
case 0:
if case 0 = indexPath.row {
//do somthing
} else if case 1 = indexPath.row {
//do somthing
// other possible cases
} else { // default
//do somthing
}
case 1:
// other possible cases
default:
break
}