检查 NSIndexPath 的行和节的开关

Posted

技术标签:

【中文标题】检查 NSIndexPath 的行和节的开关【英文标题】:switch that checks NSIndexPath's row and section 【发布时间】:2016-03-11 17:03:09 【问题描述】:

我想设置一个 switch 语句来检查 NSIndexPath 的值。 NSIndexPath 是一个类,它包括(除其他外)部分和行(indexPath.row, indexPath.section

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

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

什么是快速切换翻译?

【问题讨论】:

也许有用:***.com/questions/30189505/…. 【参考方案1】:

一种方式(这是因为 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

【讨论】:

我同意您首选的嵌套方法,但第二种方法也可以使用 switch (indexPath.row, indexPath.section)  case(0,0): ... @MartinR D'Oh!我就像 Tuple 先生,我仍然把球丢在那个人身上。 第二种方法看起来很棒。谢谢! @matt 谢谢你的甜蜜回答【参考方案2】:

只需使用 IndexPath 而不是 NSIndexPath 并执行以下操作:

Swift 3 和 4 中测试:

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

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

编辑:

我只是注意到上面这个方法没有matt的答案的元组匹配方法强大。

如果你使用 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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于检查 NSIndexPath 的行和节的开关的主要内容,如果未能解决你的问题,请参考以下文章

根据objective c中得到的json隐藏行和节

如何将 NSIndexPath 转换为 NSInteger?

复杂的行和列操作 pandas

NSIndexPath 中是不是存在节

ARC_x86_OS选择

在二维数组中的行和列处查找最大值