在 CoreData 中,我定义了一个有序对多关系。这种关系在 Swift 中是这样定义的:
@NSManaged var types : NSMutableArray
但是,为了最好地使用 Swift,我想使用像 Type[]
这样的普通 Swift 数组。 .但是,CoreData 强制我使用 NS(Mutable)Array
.我如何输入/转换 NSArray
至 Array<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/