2017-09-01 144 views
0

我正在學習CoreData,我有一個相當基本的問題。NSManagedObject子類中的泛型類型

當我創建一個NSManagedObject子類時,生成的代碼在某些地方完全沒有辦法爲我做出很好的類型化函數,但是在其他情況下會讓一些煩人的泛型事情發生,我很困惑。

例如,我有一個父/子,一個在一對託管類的許多(有序)的關係。 ClassA是可以容納ClassB的許多實例的父代。

在爲ClassA的產生的託管代碼,它給人的容器的ClassB的項目,如:

@NSManaged public var items: NSOrderedSet? 

這是通用的,但後來在代碼中有很多方便地輸入功能,比如這一個:

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

很好......但缺少一個基本的東西:一個強類型的訪問器來獲取items集合。

我可以輕鬆地投事情當然:

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

但我很困惑...爲什麼他們走出去的方式,使輸入很好功能很多情況下,但留下的一個最基本的東西通用?

我假設有一些基本的東西,我不明白這裏。

回答

0

因爲Swift和Foundation,這就是爲什麼。

,因爲它是目前可能的這種關係這是作爲一般。這不是一般的多,因爲

  • NSOrderedSet是不通用的,所以你不能有NSOrderedSet<ClassB>,例如。
  • 雖然斯威夫特包括泛型集合像ArraySet,沒有斯威夫特-Y通用OrderedSet集合。

也有在覈心數據代碼生成SWIFT相關間隙。例如,如果這種關係沒有排序,則生成的代碼仍然會使用非通用的NSSet。這沒有什麼好的理由,但至少它可以投射到Set