簡體   English   中英

從數組創建 NSMutableArray<T> 在斯威夫特

[英]Create NSMutableArray from Array<T> in 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值數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM