【问题标题】:Cannot find overload with sorted function swift使用排序函数swift找不到重载
【发布时间】:2015-04-20 10:23:52
【问题描述】:

我正在尝试根据 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) { $0.listTitle < $1.listTitle }
    reloadView()

}

sortedLists 行我收到错误:

'找不到接受参数列表的 'sorted' 的重载 输入 '([(List)], (_, _) -> _)''。

我们将不胜感激。

【问题讨论】:

    标签: xcode swift sorting overloading sorted


    【解决方案1】:

    NSString 没有开箱即用的&lt;

    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) { ($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
    }
    

    【讨论】:

    • OP 报告的错误消息非常无用。似乎 Swift 编译器的错误消息与 Objective-C 的 clang 编译器相比是一个巨大的退步。也许是时候开始针对编译器记录错误了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多