繁体   English   中英

Swift:CoreData和通用的NSOrderedSet

[英]Swift: CoreData and generic NSOrderedSet

我不确定我是否只是没有找到任何信息或是否不可能。

我查了几页。 我想在Swift中使用泛型的NSOrderedSet的泛型版本。

使用Set,您可以执行以下操作:

Swift的Set类型桥接到Foundation的NSSet类。 来源: Apple Docs - Sets

在NSManagedObject子类中,您只需将NSSet更改为Set即可。 (经过测试)

@property NSArray<NSDate *> *dates;
@property NSSet<NSString *> *words;
@property NSDictionary<NSURL *, NSData *> *cachedData;

var dates: [NSDate]
var words: Set<String>
var cachedData: [NSURL: NSData]

资料来源: Apple Docs - Lightweight Generics

但我在Swift中找不到任何对有序集的引用。 我可以使用Objective-C中的NSOrderedSet,但我不会在Swift中使用泛型。

有没有可能在Swift的集合中定义一个订单?

不,在Swift中没有有序的设置,并且说实话,你不应该使用有序的设定期限。 它们很少使用。

但有时候,它很有用。 因此,您不必自己对数据进行排序。 特别是当您拥有一个包含子实体列表的实体时,它们将不会被排序,因为它是一个集合。 然后你必须创建一个数组,以便按特定顺序准备数据,因为普通集不能保持其顺序。 因此,对于核心数据,它特别适用于NSFetchedResultsController。

它是核心数据的一个懒惰的补充,从来没有发生过。 它比编写自己的排序例程更有用或更高效。 在子类中编写便捷方法以生成有序数组比使用NSOrderedSet更快,更NSOrderedSet

当您使用NSFetchedResultsController它完全没用,因为NSFetchedResultsController为您命令一切。

我同意Marcus Zarra的回答,它通常不是值得使用的功能,但想添加一些东西。 我通常会建议为可以排序的显式订单值添加属性。

有序集是Core Data中的二等公民,即使对于Apple,它们在iCloud Core Data存储中也不受支持(尽管该系统通常存在问题,我相信它现在一般都被弃用)。

在Swift术语中,可以使用值语义编写自己的有序集,但此时不可能启用与Foundation有序集之间的桥接。

如果您真的非常渴望支持它,您可以编写自定义代码生成器来为您的自定义有序集类型创建访问器(或者只是手动添加访问器)。

总之,有些方法可以做到,但这并不意味着你应该这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM