web-dev-qa-db-ja.com

NSIndexPathの行とセクションをチェックするスイッチ

NSIndexPathの場合に値をチェックするswitchステートメントを設定したいと思います。 NSIndexPathはクラスであり、(とりわけ)セクションと行で構成されます(indexPath.row, indexPath.section

これは、行とセクションを同時にチェックするifステートメントを作成する方法です。

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

Swiftこのためのスイッチ変換とは何ですか?

17
potato

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
}
31
matt

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 を参照してください。

18
fl034

別の方法は、switchif 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
}
0
byaruhaf