我一直在尝试为Objective-C类型的数组分配一个Swift类型的数组,因为我试图在我的项目中同时使用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?我需要有关我的问题的具体答案。
期待着回答。谢谢。
答案 0 :(得分:5)
在mutableCopy
投射musicEntities
之后尝试拨打NSArray
,然后将其结果向下转发到NSMutableArray
:
musicVC.musicEntities = (musicEntities as NSArray).mutableCopy() as! NSMutableArray
答案 1 :(得分:0)
尝试这种方法,但请参阅我的警告
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
*/