将NSArray转换为Swift数组<T>

Bou*_*uke 29 core-data swift ios8

在CoreData中,我定义了一个有序的多对多关系.这种关系在Swift中定义如下:

@NSManaged var types : NSMutableArray
Run Code Online (Sandbox Code Playgroud)

但是,要最好使用Swift,我想使用普通的Swift数组Type[].但是,CoreData强迫我使用NS(Mutable)Array.我该如何输入/转换NSArrayArray<Type>[]

显然,混淆起因于以下错误:

let array = obj.types as T[] // Cannot convert expression's type 'Node[]' to type '$T2'
Run Code Online (Sandbox Code Playgroud)

虽然这是编辑接受的:

let array = obj.types as AnyObject[] as T[] // No complaint
Run Code Online (Sandbox Code Playgroud)

mat*_*att 14

我目前正在使用obj.types.allObjects as Type[],但这感觉就像一个黑客/解决方法.

然后修改你的感受.你正在做的是你如何 "输入/转换NSArray为" Array<Type>[].

NSArray总是以包含的方式进入Swift AnyObject(即a Array<AnyObject>,aka AnyObject[]).如果您知道它包含所有类型,则将其转换为特定类型取决于您,以及您如何执行此操作正是您应该执行的操作.

编辑在Swift 2.0和新的iOS 9 API中,NSArray通常会正确输入,不需要强制转换.

编辑2在Swift 3.0中,一个未正确输入的NSArray虽然不常见,但它将作为包含Any而不是AnyObject仍然必须被转换为特定类型.