2017-09-01 3 views
0

CoreDataについて学んでいますが、私はかなり基本的な質問があります。NSManagedObjectサブクラスの汎用タイプ

私はNSManagedObjectサブクラスを作成すると、生成されたコードは、いくつかの場所でうまく型付けされた関数を作成するために途切れてしまいますが、他の場合には一般的に物事が煩わしくなります。

たとえば、親子の1対多数の(順序付けられた)関係の管理対象クラスがあります。 ClassAはClassBの多くのインスタンスを保持できる親です。 ClassAのために生成されたマネージコードで

、それはようClassBのアイテムのコンテナを提供します:これは一般的なもので

@NSManaged public var items: NSOrderedSet? 

が、その後のコードであるよう、本便利な型指定された機能がたくさんあります:

@objc(insertObject:inItemsAtIndex:) 
@NSManaged public func insertIntoItems(_ value: ClassB, at idx: Int) 

素晴らしい...しかし基本的なものがありません:アイテムコレクションを取得するための強固なアクセサです。

私は簡単もちろんの事をキャストすることができます。

var myItem = myObjectOfClassA.items[0] as! ClassB 

しかし、私は混乱している...なぜ彼らは例ロットできれいに型指定された関数を作るために彼らの方法の外に出なかったが、の1を残します最も基本的なものは一般的ですか?

私はここに何か基本的なものがあると私は分かりません。

答えて

0

スイフトとファンデーションの理由からです。

この種の関係では現在一般的です。

  • NSOrderedSetがジェネリックではありませんので、あなたは、例えば、NSOrderedSet<ClassB>を持つことができないので、それはより一般的ではありません。
  • SwiftにはArrayおよびSetのような汎用コレクションが含まれていますが、Swift-y汎用OrderedSetコレクションはありません。

コアデータコード生成にスウィフト関連のギャップがあります。たとえば、この関係が順序付けられていない場合、生成されたコードは非汎用のNSSetを使用します。正当な理由はありませんが、少なくともSetにキャストすることができます。

関連する問題