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”语句执行四次?的主要内容,如果未能解决你的问题,请参考以下文章