类型“Int”不符合协议“BooleanType”的要求。

4
这个语句有什么错误吗? currentRow 是一个 NSIndexPath。
  override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.row && currentRow?.row == 5 {
        return  300
    }
    return 70

我得到的错误是:

类型“Int”不符合协议“BooleanType”


你不能说 return 300 而应该是 return true 或者 return false。300 是一个 Integer 值。 - Cesare
@CeceXX 你可以返回300。Swift将其处理为CGFloat。 - Christian
2个回答

6
如果您想检查当前行和indexPath是否都为5,则不能使用如此if语句。请将其更改为:
 if indexPath.row == currentRow?.row  && currentRow == 5 {

或者:

 if indexPath.row == 5  && currentRow?.row == 5 {

如果您想检查indexPath是否为nil,请检查indexPath是否为0
if indexPath.row != 0 && currentRow?.row == 5 {

谢谢Christian!这就是我从其他Stack Overflow答案中复制粘贴代码的结果 :) - Sam Luther
我只是好奇。你是否尝试检查indexPath.row是否也为5,还是想检查indexPath.row是否为空? - Christian
想要检查是否为空,我的错。 - Sam Luther

1
这是因为您正在尝试检查未设置的非可选 indexPath.row
如果您想检查 indexPath.row 是否为零,请添加显式检查:
if indexPath.row != 0 && currentRow?.row == 5 {
    return  300
}

与Objective-C不同,它允许您在没有明确条件的情况下进行nil和零检查,Swift需要一个明确的条件,或者使用可选类型实现的BooleanType协议执行检查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接