UITableView / indexPath.row: почему оператор if исключает строку 10? - PullRequest
0 голосов
/ 27 апреля 2018

Как ученик, я просто играл с UITableView, пользовательскими UITableViewCell, reloadData() и всем, чтобы узнать эти вещи.

Я создал пользовательский UITableViewCell с двумя UILabels. Первый должен содержать текущий номер (indexPath.row), а второй должен содержать введенный пользователем контент. Все хорошо - работало нормально. Тогда я подумал, что он может работать только в одном UILabel, создавая строку из номера строки и содержимого. При тестировании нескольких if операторов для правильного выравнивания ячеек я пришел к следующему:

У меня есть этот код в функции cellForRowAt:

if indexPath.row == 0 || indexPath.row == 1 || indexPath.row == 2 || indexPath.row == 3 || indexPath.row == 4 || indexPath.row == 5 || indexPath.row == 6 || indexPath.row == 7 || indexPath.row == 8 || indexPath.row == 9 {

     cell.textLabel?.text = "0\(indexPath.row + 1). \(userContent[indexPath.row])"

 } else if indexPath.row == 10 || indexPath.row == 11 || indexPath.row == 12 || indexPath.row == 13 || indexPath.row == 14 || indexPath.row == 15 || indexPath.row == 16 {

     cell.textLabel?.text = "\(indexPath.row + 1). \(userContent[indexPath.row])"

        }

Вывод выглядит так:

Entry 10 has a leading 0 although I told it not to have

Как я уже сказал: я просто играл, и это произошло случайно. Я что-то здесь упустил?

Я просто хочу понять, почему строка 10 не не соблюдает оператор if. Большое спасибо за любые объяснения.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Вы также можете использовать переключатель для очистки вашего кода

switch indexPath.row {
    case 0..<10:
        cell.textLabel?.text = "0\(indexPath.row)"
    default: 
        cell.textLabel?.text = "\(indexPath.row)"

}
0 голосов
/ 27 апреля 2018

Пройдитесь по вашему коду, думая «что, если это строка 0», затем «что, если это строка 1» и так далее:

if indexPath.row == 0 || indexPath.row == 1 || 
   indexPath.row == 2 || indexPath.row == 3 || 
   indexPath.row == 4 || indexPath.row == 5 || 
   indexPath.row == 6 || indexPath.row == 7 || 
   indexPath.row == 8 || indexPath.row == 9 {
       cell.textLabel?.text = 
           "0\(indexPath.row + 1). \(userContent[indexPath.row])"
            ^^^^^^^^^^^^^^^^^^^^

Теперь предположим, что это строка 9. indexPath.row равно 9, поэтому мы берем эту ветку. Мы добавляем 1, получаем 10, помещаем 0 перед ним и печатаем 010.

Это типичная ошибка начального уровня или случайная ошибка (также обычно совершаемая не начинающими, так что не расстраивайтесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...