Проблема, когда элемент массива, который я пытаюсь отфильтровать, не существует - PullRequest
0 голосов
/ 25 января 2019

У меня есть код, который получает ключ от firebase и сравнивает его с ключом, хранящимся локально в текстовом файле. Если есть совпадение, он проверяет дополнительный параметр чтения / непрочитанного и затем помечает переменную как «Чтение» или «Непрочитанное».

Код работает нормально до тех пор, пока каждый ключ, который я извлекаю из Firebase, существует в текстовом файле. Тем не менее, я получаю аварийное завершение «Индекс из границ», если ключ от Firebase не существует в моем локальном файле.

Код, указанный ниже:

func readFile(){

    let filename = getDocumentsDirectory().appendingPathComponent("output.txt")
    do {

        let textStringFromFile = try String(contentsOf: filename, encoding: .utf8)

        var result: [(messageID: String, readStatus: String)] = []

        let rows = textStringFromFile.components(separatedBy: "\n")
        for row in rows {
            let columns = row.components(separatedBy: ",")
            result.append((columns[0], columns[1]))
        }


        let filteredMessageID = result.filter { $0.messageID == (nominationKeyForReadStatus) }

        var messageIDElement = filteredMessageID.map { $0.messageID }
        var readStatusElement = filteredMessageID.map { $0.readStatus }

        if readStatusElement[0] == "1" && nominationKeyForReadStatus == messageIDElement[0] {

            readStatusFromFunction = "Read"
        }
        else {
            readStatusFromFunction = "Unread"
        }
    }
    catch{

        }

    }

Кажется, что происходит сбой, когда FilterMessageID имеет 0 значений. Как я могу объяснить этот случай? Заранее спасибо.

1 Ответ

0 голосов
/ 25 января 2019

Можно выполнить предварительную проверку перед доступом к индексу для messageIDElement, readStatusElement и filteredMessageID, что он не имеет счет 0.

if filteredMessageID.count != 0 {
   if readStatusElement.count != 0 && messageIDElement != 0 {
    // Your code
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...