【问题标题】:Error: Can't assign Value of type '[SomeObject]' to type '[NSMutableArray]'错误:无法将类型“[SomeObject]”的值分配给类型“[NSMutableArray]”
【发布时间】:2016-01-03 12:46:24
【问题描述】:

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

期待答案。谢谢。

【问题讨论】:

  • 从不相关的类型转换总是失败。你收到这个编译器警告了吗?
  • 我在我的问题中提到了我得到什么样的错误。是的,当我尝试投射时,我得到了你提到的错误。
  • 在下面查看我的答案。
  • MusicEntity 是如何定义的? musicVC.musicEntities 是如何定义的?

标签: ios objective-c arrays swift nsmutablearray


【解决方案1】:

尝试在将musicEntities 转换为NSArray 之后调用mutableCopy,然后将其结果向下转换为NSMutableArray

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

【讨论】:

  • 当我实现你的代码时,我会收到磨损消息“从 '() -> AnyObject' 转换为不相关类型 'NSMutableArray' 总是失败”。怎么办?
  • 很抱歉。 mutableCopy是一个方法调用,所以我在上面的代码中添加了()
  • 我已从您的代码中删除了方括号。 musicEntities 本身是一个数组,因此无需将其放入数组索引中。卸下方括号后,它现在可以正常工作了。
  • 好的,很好。我将更新我的答案以与您的代码保持一致。那是我最初的答案,但后来我添加了[],因为我认为您需要[NSMutableArray] 而不仅仅是NSMutableArray
【解决方案2】:

尝试这种方法,但请参阅我的警告

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多