我不确定我是没有找到任何信息还是不可能。
我查了好几页。我想在Swift中使用通用的NSOrderedSet泛型版本。
有了一组,您就可以做到这一点:
Swift的集合类型被桥接到基金会的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]但我在斯威夫特找不到任何关于有序集的参考资料。我可以使用Objective中的NSOrderedSet,但是那样我就不会在Swift中使用泛型了。
是否有可能在Swift的集合中定义一个顺序?
发布于 2016-04-25 15:45:18
不,在Swift中没有命令集,而且诚实地说,您不应该使用有序的设定期。它们很少被使用。
但有时,它是有用的。这样你就不用自己整理数据了。特别是当您有一个包含子实体列表的实体时,它们将不会被排序,因为它是一个集合。然后,您必须创建一个数组,以便按照特定的顺序准备数据,因为普通的集合不遵守其顺序。因此,对于核心数据,它是有用的,特别是在NSFetchedResultsController中使用。
这是对核心数据的一种懒散的添加,根本不应该发生。它从来没有比编写自己的排序例程更有用或更有表现力的了。在子类中编写一个方便的方法来生成有序数组将比使用NSOrderedSet更快和更好的性能。
当您使用NSFetchedResultsController时,它是完全无用的,因为NSFetchedResultsController为您订购了所有东西。
发布于 2016-07-12 23:34:10
我同意马库斯·扎拉的回答,它通常不是一个值得使用的特性,而是想添加一些东西。我通常建议为您可以排序的显式order添加一个属性。
订单集是核心数据中的二等公民,即使对于苹果来说,它们在iCloud核心数据存储中也不受支持(尽管该系统总体上存在问题,我认为它现在已经被普遍反对)。
在Swift术语中,用值语义编写您自己的有序集是可能的,但此时不可能启用与Foundation之间的桥接。
如果您真的非常想支持它,可以编写一个自定义代码生成器来为您的自定义有序集类型创建访问器(或者只需手工添加访问器)。
总之,有一些方法可以做到,但这并不意味着你应该这样做。
https://stackoverflow.com/questions/36837280
复制相似问题