找不到排序函数的重载 swift

Cannot find overload with sorted function swift

我正在尝试根据 listTitle 属性 对象的字母顺序对 List 对象数组进行排序。这是我的 List 对象:

class List : DBObject   {

    dynamic var listTitle : NSString!
    dynamic var listDate : NSDate!
    dynamic var ordered : NSNumber!
    dynamic var qrCode : NSString!
    dynamic var storeId : NSNumber!    
}

这是我的排序函数:

func sortByName()   {

    var listArray = [List]()

    for object in cardViewArray {
        let card = object as CardView
        listArray.append(card.list)
    }

    var sortedLists = [List]()
    sortedLists = sorted(listArray) { [=12=].listTitle < .listTitle }
    reloadView()

}

sortedLists 行我收到错误:

'Cannot find an overload for 'sorted' that accepts an argument list of type '([(List)], (_, _) -> _)''.

我们将不胜感激。

NSString 没有开箱即用的 <

let s1: NSString = "foo"
let s2: NSString = "bar"

s1 < s2
// error: 'NSString' is not implicitly convertible to 'String'; did you mean to use 'as' to explicitly convert?

过去,隐式 NSStringString 的转换问题不大,但 1.2 解决了这个问题。

各种不同的方法来解决这个问题,但请尝试:

sorted(listArray) { ([=11=].listTitle as String) < (.listTitle as String) }

顺便说一下,数组有一个内置的 sorted 方法(它可能会执行得更好,因为它更了解它正在排序的内容):

let sortedLists = listArray.sorted { etc. }

此外,每当您发现自己创建了一个空数组,然后用另一个序列的每个元素的转换填充它时,这都是 map:

的一个很好的候选者
let listArray = cardViewArray.map { 
    let card = [=13=] as CardView
    return card.list
}