Swift 中的“do-catch”语句执行四次?

Posted

技术标签:

【中文标题】Swift 中的“do-catch”语句执行四次?【英文标题】:"do-catch" statement in Swift executing four times? 【发布时间】:2017-11-02 13:43:40 【问题描述】:

我正在编写的程序有一个小问题。它的目的是读取一个 .txt 的跟踪名称文件并填充一个 TableView。出于某种原因,switch case 中的 do - catch 语句运行了四次而不是一次。有人可以帮我理解为什么吗? (Swift 和 ios 的新手。)

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

    switch np 
    case "Acadia":

        let filename = "/Users/michaeltheadley/Desktop/Trailr/Data/National/National_Parks/Acadia/acadia_trails.txt"

        do 
            let contents = try String(contentsOfFile:filename, encoding: String.Encoding.utf8)
            count = contents.components(separatedBy: .newlines).count
            print("the situation")

            // why is this block being executed x4 ??

            let lines : [String] = contents.components(separatedBy: .newlines)
            for item in lines 
                trails_array.append(item)
                print(item)
                print(trails_array.count)
            
        
        catch _ as NSError 
            return 0
        


        return count

【问题讨论】:

numberOfRowsInSection 在每次重新加载 tableView 时按每个部分调用。所以要么你多次重新加载你的 tableView,要么你有多个部分。 只是一个评论。我不建议您在“numberOfRowsInSection”或其他 tableview/data-source 委托方法中进行复杂的计算。特别是在主队列上。这种方法应该尽可能轻量级,并且处理/磁盘访问应该在后台队列中完成,在 tableView 加载之前。 【参考方案1】:

请在 tableview 中检查您的 numberOfSections,只有当您有 4 个部分时,才会调用 numberrows 4 次

【讨论】:

以上是关于Swift 中的“do-catch”语句执行四次?的主要内容,如果未能解决你的问题,请参考以下文章

内存泄漏,在do-catch块中。 iOS,Swift

Swift学习笔记9--错误控制

在一个 catch 块中处理多个 swift 错误

Swift--控制流

错误处理do-catch

Swift Guard