我有一个与ServiceItem
一对多关系的ServiceGroup
实体,称为items
。我想迭代items
,但是Swift似乎完全不知道变量类型,因为items
只是将其定义为NSOrderedSet?
。
我发现我的项目迭代的唯一方法是,我最近必须使用添加到循环的新案例语法来投射它们,但是这似乎很荒谬,因为代码 - 应该知道什么类型已经。
任何人都有建议,以便我不必经常案件/胁迫我的关系实体?
if let items = self.items {
for case let item as ServiceItem in items {
mins += item.calculateTotalMinutes()
}
}
(在我看来)略微优雅的东西是使用较高的功能:
let minutes = items
.map({$0 as? ServiceItem})
.flatMap({$0})
.reduce(0) { (result, serviceItem) -> Double in
return result + serviceItem.calculateTotalMinutes()
}
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() })
}