我一直在尝试将 Swift 类型的数组分配给 Objective-C 类型的数组,因为我试图在我的项目中同时使用 Objective-C 和 Swift 类。 在我的 swift 类中,我声明了一个数组
var musicEntities = [MusicEntity]()
。当我尝试分配实现以下代码时:
let musicVC: MusicViewController = MusicViewController.sharedInstance()
musicVC.musicEntities = musicEntities // line2
在第 2 行我收到以下错误:
Can't assign Value of type '[SomeObject]' to type '[NSMutableArray]'
我知道强制转换可以帮助我解决问题。我尝试在 Stack Overflow 中找到具体答案,但没有得到任何可以解决我的问题的具体答案。我尝试了很多方法将其转换为 NSMutableCompatible,但是当我尝试转换时出现不同类型的错误。
如何将 [MusicEntity] 数组转换为 NSMutableArray?我需要有关我的问题的具体答案。
期待答案。谢谢。
尝试在将其转换为
mutableCopy
后在 musicEntities
上调用 NSArray
,然后将其结果向下转换为 NSMutableArray
:
musicVC.musicEntities = (musicEntities as NSArray).mutableCopy() as! NSMutableArray
尝试这种方法,但请参阅我的警告
import Foundation
class C {}
var nsArray = NSMutableArray()
nsArray.addObject(C())
var swiftArray = nsArray as AnyObject as! [C]
dump(swiftArray)
swiftArray.dynamicType // Array<C>.Type
/*
▿ 1 element
- [0]: C #0
*/
// oposite
class C1 {}
var arr = [C1()]
// WARNING, if C1 will be value type (aka struct C1{})
// the next sentence will crash you programm
var nsArray1 = arr as! NSMutableArray // compiler warning
dump(nsArray1)
/*
▿ 1 element
- [0]: C1 #0
*/
nsArray1.dynamicType // _SwiftDeferredNSArray.Type
所以下一行会崩溃
nsArray1.addObject(C1())
你能做的最好的事情就是创建一个新的 NSMutableArray 并填充它
let newNsArray = NSMutableArray(array: arr)
newNsArray.addObject(C())
dump(newNsArray)
/*
▿ 2 elements
- [0]: C1 #0
- [1]: C #1
*/
有点晚了,但我还没看到这个答案。
您可以使用 Swift 数组干净地初始化
NSMutableArray
,无需强制转换:
let objcArray = NSMutableArray(array: musicEntities)