将NSSet转换为Swift数组
在CoreData中,我定义了一个无序的多对多关系。 这种关系在Swift中是这样定义的:
@NSManaged var types : NSMutableSet
但是,最好使用Swift,我想使用一个普通的Swift数组,如Type[]
。 但是,CoreData迫使我使用NS(Mutable)Set
。 我如何可以将NSSet
Array<Type>[]
转换/转换为Array<Type>[]
?
从Xcode 7.2到Swift 2.1.1
实际上,我通过审判发现:
@NSManaged var types : Set<Type>
工作得很好。
事实是,CoreData产生一些像这样的想法:
@NSManaged var types : NSSet
当从编辑器创build一个NSManagedObject
子类。 所以我想知道是否有一个不是非常详细的方法来使用filter
方法没有铸造。 但是Swift应该在NSSet,NSArray和他们的对手之间自动桥接。 所以我试图直接声明它作为一个集合,它的工作原理。
回答这个问题,把它转换成一个数组变得微不足道:
Array(types)
var set = NSSet() //NSSet var arr = set.allObjects //Swift Array var nsarr = set.allObjects as NSArray //NSArray
这个答案是过时的Xcode 7.2 / Swift 2.1。 查看已接受的答案以获得更新的答案。
我目前使用obj.types.allObjects as Type[]
,但感觉像一个黑客/解决方法。
您也可以使用.sortedArray对元素进行sorting。
Swift 3:
yourNSSetType?.sortedArray(using: [NSSortDescriptor(key: "keyToSortBy", ascending: true, selector: #selector(NSNumber.compare(_:)))]) as! [yourNSSetType]
对于string,请在#selector调用中使用NSString.compare。
这是我做到的:
` let array = object.NSSet?.allObjects as! [ArrayType] `
然后你可以正常操作数组:
for item in array { id = item.id }