将字符串的 NSObject 转换为 [String]

Cast NSObject of Strings to [String]

我无法尝试将字符串的 NSObject 转换为 [String]。 我正在使用 coreData,我的可转换对象是一个 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 { [=14=] as! String } . // yay!

我首先将其转换为一个集合以使其可枚举,然后将其转换为 [String]

有趣的是这不起作用:

let mySet = myObject as! NSSet 
let myArr = mySet as! [String] // nope.

如果 myObject 是一个集合(核心数据模型中的一种关系),那么请尝试

let arr:[String] = Array(myObject) as! [String]

Set 和 Array 不是同一种类型,不能相互转换。

理想情况下,您应该将 Objective-C 类型 NSSet 转换为 Swift Set:

let mySet = myObject as! Set<String>

如果迭代是您唯一的目的,那么这就是您所需要的。

如果您确实需要数组,请从集合中创建一个新数组:

let myArray = Array(mySet)

我找到了解决方法:

let mySet = myObject as! NSSet
let myArr : [String] =  mySet.map { [=10=] as! String } . // yay!

我首先将其转换为一个集合以使其可枚举,然后将其转换为 [String]

有趣的是这不起作用:

let mySet = myObject as! NSSet 
let myArr = mySet as! [String] // nope.