繁体   English   中英

我要过滤的数组元素不存在时的问题

[英]Problem when an array element i'm trying to filter for does not exist

我有一些代码从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{

        }

    }

当filteredMessageID具有0值时,似乎发生了崩溃。 如何处理这种情况? 提前致谢。

您可以在访问messageIDElementreadStatusElementfilteredMessageID的索引之前进行预先检查, readStatusElement确认其没有计数0。

if filteredMessageID.count != 0 {
   if readStatusElement.count != 0 && messageIDElement != 0 {
    // Your code
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM