2015-02-19 3 views
4

Что я делаю неправильно с этим утверждением? currentRow является NSIndexPathТип 'Int' не соответствует протоколу 'BooleanType'

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if indexPath.row && currentRow?.row == 5 { 
     return 300 
    } 
    return 70 

Ошибки я получаю:

Тип 'Int' не соответствует протоколу 'BooleanType'

+0

Вы не можете сказать 'return 300', но' return true' или 'return false'. 300 - значение «Целое». – Cesare

+0

@CeceXX вы можете вернуть 300. Swift обрабатывает его как CGFloat – Christian

ответ

6

Если вы хотите проверить, если ваш currentRow и 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 { 
+0

Спасибо, Кристиан! Это то, что я получаю для копирования и вставки кода из других ответов здесь: –

+0

Мне просто интересно. Вы пытались проверить, является ли indexPath.row также 5 или вы хотите проверить, нет ли indexPath.row? – Christian

+0

хотел проверить, нуль, мой плохой –

1

Это происходит потому, что вы пытаетесь проверить необязательный indexPath.row для установки.

Если вы хотели бы проверить indexPath.row на ноль, добавить явную проверку:

if indexPath.row != 0 && currentRow?.row == 5 { 
    return 300 
} 

В отличие от Objective-C, которая позволяет делать nil и нулевые чеки без явного условия, Swift ожидает явное условие, или выполняет проверку с использованием протокола BooleanType, реализуемого дополнительными типами.

+0

большое спасибо за дополнительную информацию –