ios - 在 Swift 中从 Array<T> 创建 NSMutableArray

标签 ios arrays swift

我正在尝试编写一个扩展,我在其中定义了一个新方法,用于使用 NSSortDescriptor 类按对象的属性就地对包含的对象进行排序。但是,由于某种原因,我未能填充 self 的可变版本,并收到以下错误:

Cannot find an initializer for type NSMutableArray that accepts an argument list of type (array: Array<T>)

这是我的方法:

extension Array {

    public mutating func sortInPlace(field: String, ascending: Bool) {

        let mutableArray = NSMutableArray(array: self) // error here.

        let sortDescriptor = NSSortDescriptor(key: field, ascending: ascending)     
        mutableArray.sortUsingDescriptors([sortDescriptor])

        self = mutableArray as AnyObject as! [Generator.Element]
    }
}

我也尝试了以下但没有成功:

let mutableArray = NSMutableArray(array: self as! [AnyObject])

最佳答案

没有看到你的扩展定义很难说,但这对我有用:

extension Array where T : AnyObject {
    func toMutableArray() -> NSMutableArray {
        return NSMutableArray(array: self)
    }
}

let array: [NSString] = ["A", "B"]
let mArray = array.toMutableArray()

print(mArray) // ( A, B )

这里的问题是您需要将 Array 上的扩展限制为仅接收 AnyObject 数组。 String 是一个结构,而不是一个类(AnyObject 被限制为引用类型)。这也是为什么我需要在数组上使用 [NSString] 的类型说明符。否则,它将是一个结构数组,而不是一个 String 值数组。

关于ios - 在 Swift 中从 Array<T> 创建 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31196316/

相关文章:

ios - Firebase监听点赞数的变化并将其显示在屏幕上

java - 创建接受接口(interface)对象数组的方法

swift - Xcode Swift 命令行工具从键盘读取 1 个字符而无需回显或需要按回车

c - 将 String 解析为 C 中的标记 - 出了什么问题?

java - 如何在 Java 中使用枚举作为数组索引

swift - 快速保存 NSManagedObjectContext 时出错

ios - UIGestureRecognizer.State 是 'possible' 而不是 'recognized' 每隔一次点击 MKMapView

iOS - 只有一个 View 的滑动手势动画

ios - UITableView 不显示标签,也不显示单元格

ios - 已知 Xcode 错误/陷阱的列表