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

时间:2019-01-29 09:20:36

标签: swift casting nsobject

我在尝试将字符串的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.

3 个答案:

答案 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.