错误:无法指定类型'[SomeObject]'的值以键入'[NSMutableArray]'

时间:2016-01-03 12:46:25

标签: ios objective-c arrays swift nsmutablearray

我一直在尝试为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?我需要有关我的问题的具体答案。

期待着回答。谢谢。

2 个答案:

答案 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
*/