找不到带有排序函数swift的重载

时间:2015-04-20 10:23:52

标签: xcode swift sorting overloading sorted

我尝试按字母顺序基于List属性对listTitle个对象进行排序。这是我的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) { $0.listTitle < $1.listTitle }
    reloadView()

}

sortedLists行,我收到错误:

  

&#39;找不到“已排序”的超载情况。接受参数列表   输入&#39;([(List)],(_,_) - &gt; _)&#39;&#39;。

任何和所有帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

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转换的问题已经不那么严重了,但是对此进行了修改。

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

sorted(listArray) { ($0.listTitle as String) < ($1.listTitle as String) }

顺便说一下,数组内置了sorted方法(可能性能更好,因为它更了解它的排序方式):

let sortedLists = listArray.sorted { etc. }

此外,每当你发现自己创建一个空数组,然后用另一个序列的每个元素的转换填充它,这是map的一个很好的候选者:

let listArray = cardViewArray.map { 
    let card = $0 as CardView
    return card.list
}