将 NSSet 转换为数组
Convert NSSet into an Array
我将数据存储在使用关系的 CoreData 实体中。默认情况下,toMany
类型的关系将是 NSSet
类型。为了按照添加到此 NSSet
的项目的顺序将此 NSSet
加载到表视图中,我需要将其转换为数组。我该如何实现这一目标?
生成的 NSManaged 子类:
extension Node {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Node> {
return NSFetchRequest<Node>(entityName: "Node")
}
@NSManaged public var value: String?
@NSManaged public var children: NSSet?
@NSManaged public var parent: Node?
@objc(addChildrenObject:)
@NSManaged public func addToChildren(_ value: Node)
@objc(removeChildrenObject:)
@NSManaged public func removeFromChildren(_ value: Node)
@objc(addChildren:)
@NSManaged public func addToChildren(_ values: NSSet)
@objc(removeChildren:)
@NSManaged public func removeFromChildren(_ values: NSSet)
}
注意:由于 CloudKit 不支持有序关系,我不能将有序排列用作解决方案的一部分。
我的建议是将关系声明为 non-optional native Swift type
@NSManaged public var children: Set<Node>
要获得数组只需 sort
集合。使用 Swift Set
非常容易。由于集合根据定义是无序的,因此无论如何您都必须这样做才能获得固定顺序。假设你有一个 dateAdded
属性,你可以写
let sortedChildren = children.sorted{[=11=].dateAdded > .dateAdded}
我将数据存储在使用关系的 CoreData 实体中。默认情况下,toMany
类型的关系将是 NSSet
类型。为了按照添加到此 NSSet
的项目的顺序将此 NSSet
加载到表视图中,我需要将其转换为数组。我该如何实现这一目标?
生成的 NSManaged 子类:
extension Node {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Node> {
return NSFetchRequest<Node>(entityName: "Node")
}
@NSManaged public var value: String?
@NSManaged public var children: NSSet?
@NSManaged public var parent: Node?
@objc(addChildrenObject:)
@NSManaged public func addToChildren(_ value: Node)
@objc(removeChildrenObject:)
@NSManaged public func removeFromChildren(_ value: Node)
@objc(addChildren:)
@NSManaged public func addToChildren(_ values: NSSet)
@objc(removeChildren:)
@NSManaged public func removeFromChildren(_ values: NSSet)
}
注意:由于 CloudKit 不支持有序关系,我不能将有序排列用作解决方案的一部分。
我的建议是将关系声明为 non-optional native Swift type
@NSManaged public var children: Set<Node>
要获得数组只需 sort
集合。使用 Swift Set
非常容易。由于集合根据定义是无序的,因此无论如何您都必须这样做才能获得固定顺序。假设你有一个 dateAdded
属性,你可以写
let sortedChildren = children.sorted{[=11=].dateAdded > .dateAdded}