将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 }