2017-12-05 10 views
0

itemsというServiceItemに1対多の関係を持つServiceGroupエンティティがあります。 itemsを反復したいが、itemsはちょうどNSOrderedSet?と定義されているので、素早く変数型を知らないようだ。迅速にCoreDataの関係をエレガントに反復処理しますか?

私のアイテムを繰り返し処理できることがわかった唯一の方法は、最近ループのために追加された新しいケースシンタックスを使用してそれらをキャストしなければならないことです。タイプは既にあります。

私の関係エンティティを常に強制する必要はありませんので、誰もが提案していますか?

if let items = self.items { 
    for case let item as ServiceItem in items { 
     mins += item.calculateTotalMinutes() 
    } 
} 
+0

ために思えますか? –

答えて

-2

(私の意見では)もう少しエレガントな何かがそうのような高次の機能を使用することです:

let minutes = items 
     .map({$0 as? ServiceItem}) 
     .flatMap({$0}) 
     .reduce(0) { (result, serviceItem) -> Double in 
      return result + serviceItem.calculateTotalMinutes() 
    } 
+1

申し訳ありませんが、読解力があり、かつ/またはエレガントであると思われる場合、私はあなたが単語の意味を理解しているとは思いません。 –

0

NSOrderedSetは補助配列を取得するプロパティarrayを持っています。プロパティは[Any]を返すので、型をキャストする必要があります。 `NSOrderedSet `:あなたはアイテムの種類を含めるために `items`を再定義する必要がありますように、あなたが使用できる利便 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() }) 
}