迭代数组时Swift无限循环

时间:2015-05-29 16:42:46

标签: ios arrays swift loops

我的协议定义为......

@objc protocol MyDatasource : class {

    var currentReportListObjects:[ReportListObject] { get };
}

和一些代码在swift中迭代返回的数组(作为来自ObjC的NSArray)...

            if let reportListObjects = datasource?.currentReportListObjects {

                for reportListObject:ReportListObject? in reportListObjects {

                    if let report = reportListObject
                    {
                        // Do something useful with 'report'
                    }
                }
            }

如果我的reportListObjects数组是nil,我会陷入for循环的无限循环中。同样,如果数组中有数据,则会迭代并执行“有用的东西”,直到到达我的数组末尾,但循环没有被破坏并继续无限循环。

我做错了什么?或者有什么令人目眩的明显我在这里失踪了吗?

1 个答案:

答案 0 :(得分:3)

你在这里添加了许多令人困惑的额外选项。这就是你的意思:

for report in datasource?.currentReportListObjects ?? [] {
   // Do something useful with 'report'
}

如果datasource有值,则会迭代其currentReportListObjects。否则它会迭代一个空列表。

如果您确实希望将其分解,而不是使用??,那么您的意思是:

if let reportListObjects = datasource?.currentReportListObjects {
    for report in reportListObjects {
        println(report)
    }
}

不需要中间reportListObject:ReportListObject?(这是你问题的根源,因为它接受nil,这是生成器的通常终止。)