Swift 3.0 sort - 传递给不带参数的调用的参数

时间:2016-08-17 11:15:58

标签: swift swift3

我目前正在尝试将一些Swift 2代码移植到Swift 3.0。

以下是一行令我疯狂的代码。

    public private(set) var searchHistory: [SearchHistoryEntry] = [SearchHistoryEntry]() // Struct that is cComparable 
....
...
    searchHistory.sortInPlace({ $0.lastUsage.isAfter($1.lastUsage) })

这是我的Swift 3.0版本

searchHistory.sort(by:{ $0.lastUsage.isAfter($1.lastUsage) })

lastUsage属于日期

编译器抱怨以下错误消息

参数传递给不带参数的调用

任何想法我做错了什么? 我真的不明白编译器想要讲什么。 排序需要一个块,我通过它,一切都应该没问题。

更新

我发现了错误。 Swift将所有NSDate属性转换为Date,我们在NSDate上获得了名为 isAfter 的扩展。所以编译器找不到isAfter了。编译器错误消息完全是误导性的。

2 个答案:

答案 0 :(得分:1)

我会使用sorted(by: )

searchHistory.sorted(by: {$0.lastUsage > $1.lastUsage})

完整的工作示例:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy"

struct ExerciseEquipment
{
    let name: String
    let lastUsage: Date
}

let myExerciseEquipment =
[
    ExerciseEquipment(name: "Golf Clubs", lastUsage: dateFormatter.date(from: "03-16-2015")!),
    ExerciseEquipment(name: "Tennis Racket", lastUsage: dateFormatter.date(from: "06-30-2003")!),
    ExerciseEquipment(name: "Skis", lastUsage: dateFormatter.date(from: "02-08-2017")!),
    ExerciseEquipment(name: "Hockey Stick", lastUsage: dateFormatter.date(from: "09-21-2010")!),
    ExerciseEquipment(name: "Mountain Bike", lastUsage: dateFormatter.date(from: "10-30-2016")!)
]

print(myExerciseEquipment.sorted(by: {$0.lastUsage > $1.lastUsage}))

...结果

  

[ExerciseEquipment(姓名:“Skis”,lastUsage:2017-02-08 05:00:00   +0000),ExerciseEquipment(名称:“Mountain Bike”,lastUsage:2016-10-30 04:00:00 +0000),ExerciseEquipment(名称:“Golf Clubs”,lastUsage:   2015-03-16 04:00:00 +0000),ExerciseEquipment(名称:“曲棍球棒”,   lastUsage:2010-09-21 04:00:00 +0000),ExerciseEquipment(名称:“网球   Racket“,lastUsage:2003-06-30 04:00:00 +0000)]

答案 1 :(得分:1)

刚出现同样的错误。我之前在Swift中的代码是:

let sorted =  array.sorted {
    $0.characters.count < $1.characters.count
}

然而,它不再起作用了。看起来他们已使用[{1}}

的参数更新了sorted()

以下对我有用:

sorted(by: )