我在尝试将字符串的NSObject强制转换为[String]时遇到问题。 我正在使用coreData,而我的transformable是一个NSObject。令人讨厌的是,它是无法枚举的。因此,我通常的技巧不起作用。 有人可以帮我吗?
谢谢
{(
dried,
stewed
)}
这应该变成这样:
[dried, stewed].
通常的向下转换不起作用:
myObject as! [String] :(
我还注意到有时错误消息说它不能向下转换NSObject,有时它说:
Could not cast value of type '__NSSetI' (0x10f101138) to 'NSArray' (0x10f101598).
编辑: 我找到了解决方法:
let mySet = myObject as! NSSet
let myArr : [String] = mySet.map { $0 as! String } . // yay!
我首先将其转换为可枚举的集合,然后将其转换为[String]
有趣的是,这不起作用:
let mySet = myObject as! NSSet
let myArr = mySet as! [String] // nope.
答案 0 :(得分:0)
如果myObject是一个集合(核心数据模型中的关系),则尝试执行
let arr:[String] = Array(myObject) as! [String]
答案 1 :(得分:0)
Set和Array不是同一类型,您不能仅将它们彼此转换。
理想情况下,您应该将Objective-C类型NSSet
转换为Swift Set
:
let mySet = myObject as! Set<String>
如果迭代是您的唯一目的,那么这就是您所需要的。
如果您确实需要一个数组,请从集合中创建一个新数组:
let myArray = Array(mySet)
答案 2 :(得分:0)
我找到了一种解决方法:
let mySet = myObject as! NSSet
let myArr : [String] = mySet.map { $0 as! String } . // yay!
我首先将其转换为可枚举的集合,然后将其转换为[String]
有趣的是,这不起作用:
let mySet = myObject as! NSSet
let myArr = mySet as! [String] // nope.