检查NSIndexPath的行和节的开关

时间:2016-03-11 17:03:09

标签: swift switch-statement nsindexpath

我想设置一个switch语句来检查NSIndexPath的值。 NSIndexPath是一个类,它包含(以及其他内容)section和row(indexPath.row, indexPath.section

这就是我如何制定一个if语句来同时检查行和一个部分:

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

什么是swift开关翻译呢?

3 个答案:

答案 0 :(得分:26)

一种方法(这可行,因为NSIndexPaths本身是等同的):

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 :(得分:14)

只需使用IndexPath代替NSIndexPath,然后执行以下操作:

Swift 3和4

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

第一个整数是section,第二个整数是row

修改

我刚才注意到上面的方法没有像matt的答案的元组匹配方法那样强大。

如果您使用元组执行此操作,则可以执行以下操作:

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

答案 2 :(得分:0)

另一种方法是将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
}