错误:无法将类型“[SomeObject]”的值分配给类型“[NSMutableArray]”

问题描述 投票:0回答:3

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

期待答案。谢谢。

ios objective-c arrays swift nsmutablearray
3个回答
6
投票

尝试在将其转换为

mutableCopy
后在
musicEntities
上调用
NSArray
,然后将其结果向下转换为
NSMutableArray
:

musicVC.musicEntities = (musicEntities as NSArray).mutableCopy() as! NSMutableArray

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

0
投票

有点晚了,但我还没看到这个答案。

您可以使用 Swift 数组干净地初始化

NSMutableArray
,无需强制转换:

let objcArray = NSMutableArray(array: musicEntities)
© www.soinside.com 2019 - 2024. All rights reserved.