core-data - 将 NSArray 转换为 Swift Array<T>

标签 core-data swift ios8

在 CoreData 中,我定义了一个有序对多关系。这种关系在 Swift 中是这样定义的:

@NSManaged var types : NSMutableArray

但是,为了最好地使用 Swift,我想使用像 Type[] 这样的普通 Swift 数组。 .但是,CoreData 强制我使用 NS(Mutable)Array .我如何输入/转换 NSArrayArray<Type>[]

显然,混淆是由以下错误引起的:

let array = obj.types as T[] // Cannot convert expression's type 'Node[]' to type '$T2'

虽然这被编辑接受:

let array = obj.types as AnyObject[] as T[] // No complaint

最佳答案

I'm currently using obj.types.allObjects as Type[], but that feels like a hack/workaround.

然后修正你的感受。您正在做的正是您“类型转换/将 NSArray 转换为 Array<Type>[] 的方式。”

NSArray 总是以包含 AnyObject 的形式到达 Swift。 (即 Array<AnyObject> ,又名 AnyObject[] )。将其转换为特定类型(如果您知道它包含所有一种类型)完全取决于您,而您的操作方式正是您应该做的。

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

编辑 2 在 Swift 3.0 中,类型不正确的 NSArray 虽然不常见,但会以包含 Any 的形式到达。而不是 AnyObject并且仍然必须转换为特定类型。

关于core-data - 将 NSArray 转换为 Swift Array<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24422840/

相关文章:

ios - 在核心数据中遍历关系时重新获取对象

Swift D 日 UIPickerDate

ios - 无法从表格 View 中的所有自定义单元格收集数据

IOS Swift UICollectionView,我想为每个单元格设置不同的标签?

ios - 尝试用 iOS 的核心数据中的另一个替换现有的实体对象

iphone - NSIncrementalStore - 使用本地和远程数据

cocoa - 将 NSSet 作为 Core Data 中 NSManagedObject 的一部分

ios - 如何更改非事件标签栏 'more' 项目文本颜色和图像?

ios - UIView 中的 UIButton 目标操作

ios - 窗口在 iOS 8 上旋转后有奇怪的框架和偏移