我正在尝试编写一个扩展,我在其中定义了一个新方法,用于使用 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/