我的协议定义为......
@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循环的无限循环中。同样,如果数组中有数据,则会迭代并执行“有用的东西”,直到到达我的数组末尾,但循环没有被破坏并继续无限循环。
我做错了什么?或者有什么令人目眩的明显我在这里失踪了吗?
答案 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
,这是生成器的通常终止。)