无法将'Swift._SwiftDeferredNSArray'(0x11241ab30)类型的值转换为'NSMutableArray'(0x1109ef598)

0 swift

group.issues = temp.sortedArray(using: [sortDescriptor]) as! NSMutableArray
Run Code Online (Sandbox Code Playgroud)

系统版本为iOS 11.0,Xcode 9.0.

我们怎么解决这个问题?

Cha*_*tka 6

根据你实际做的事情,你最好使用一个可变的Swift数组,声明为var.但是,如果由于某种原因确实需要引用语义,可以NSMutableArray这样做:

group.issues = NSMutableArray(array: temp.sortedArray(using: [sortDescriptor]))
Run Code Online (Sandbox Code Playgroud)

你不能只是强制转换它的原因是因为Objective-C桥将一个Swift数组桥接到一个不可变的NSArray,如果你试图调用它上面的变异方法会抛出异常.

但是,最好的办法是使用Swift数组,将issues属性声明为var:

struct Group {
    ...

    var issues: [String] // or whatever type goes inside the array

    ...
}
Run Code Online (Sandbox Code Playgroud)

然后只需分配它:

group.issues = temp.sortedArray(using: [sortDescriptor])
Run Code Online (Sandbox Code Playgroud)