2016-08-17 51 views
3

我目前正试图将一些Swift 2代码移植到Swift 3.0。 这是一行令我疯狂的代码。Swift 3.0 sort - 传递给调用的参数不需要参数

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

这是我的雨燕3.0版本

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

lastUsage是类型日期

编译器提供以下错误消息

参数传递给调用了抱怨的无参数

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

+1

做'searchHistory'和'lastUsage'有哪些类型?你可以给你的代码行更多的上下文吗? – Cristik

+0

对不起,是的,我可以做到这一点。 –

+0

我得到了那个错误.. Swift将所有NSDate属性转换为Date。我们在NSDate上得到了一个名为isAfter的扩展。所以编译器无法找到isAfter了。编译器错误消息完全是误导。 –

回答

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(名称: “滑雪板”,lastUsage:2017年-02-08 05:00:00 +0000),ExerciseEquipment(名称:“山地自行车”,lastUsage:2016-10-30 04:00:00 +0000),运动设备(名称:“高尔夫球杆”,lastUsage: 2015-03-16 04:00:00 +0000),ExerciseEquipment(名称:“曲棍球棒”, lastUsage:2010-09-21 04:00:00 +0000 ),ExerciseEquipment(名称: “网球球拍 ”,lastUsage:2003-06-30 04:00:00 +0000)

1

刚刚得到了同样的错误。我之前在Swift的代码是:

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

但是,它不再工作了。看起来他们已经更新sorted()与参数sorted(by:)

以下工作对我来说现在:

let sorted = array.sorted(by: {x, y -> Bool in 
    x.characters.count < y.characters.count 
})