2016-08-17 54 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 
})