我的ServiceGroup
实体与ServiceItem
的{{1}}有一对多关系,名为items
。我想迭代items
但是swift似乎完全不知道变量类型,因为items
只是被定义为NSOrderedSet?
。
我发现能够迭代我的项目的唯一方法是我必须使用最近添加到for循环的新案例语法来强制转换它们,但这似乎很荒谬,因为代码 - 应该 - 知道什么类型已经。
任何人都有建议,以便我不必经常判断/胁迫我的关系实体吗?
if let items = self.items {
for case let item as ServiceItem in items {
mins += item.calculateTotalMinutes()
}
}
答案 0 :(得分:1)
稍微优雅一点(在我看来)会使用更高阶的函数,如下所示:
let minutes = items
.map({$0 as? ServiceItem})
.flatMap({$0})
.reduce(0) { (result, serviceItem) -> Double in
return result + serviceItem.calculateTotalMinutes()
}
答案 1 :(得分:0)
NSOrderedSet
有一个属性array
来获取支持数组。当属性返回[Any]
时,您必须转换类型。为方便起见,您可以使用forEach
if let items = self.items {
(items.array as! [ServiceItem]).forEach {
mins += $0.calculateTotalMinutes()
}
}
或reduce
if let items = self.items {
mins = (items.array as! [ServiceItem]).reduce(mins, { $0 + $1.calculateTotalMinutes() })
}