2016-08-22 174 views
1

此代碼在Xcode 8 beta 5上編譯,但在beta 6中損壞。什麼是正確的新Swift 3方式來做這種比較?Xcode 8 beta 6 swift 3 localizedCaseInsensitiveCompare

self.categories = categories.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending } 

的錯誤是

Argument passes to call that takes no arguments

+0

如果錯誤信息真的很糟糕,可能要在bugs.swift.org上提交一個錯誤。它指出它在說什麼? – jtbandes

+0

該代碼適用於我,但文檔建議使用排序(按:<)來降序排序。 – jjatie

+0

你可以在Swift 3中使用'sort'而不用'ed'來排序。 'categories.sort {$ 0.localizedCaseInsensitiveCompare($ 1)== .orderedDescending}' –

回答

1

我已經成功獲得同樣的錯誤消息。

在我的測試代碼,如果我聲明實例屬性categories爲:

var categories: [NSString] = [] 

我有此錯誤消息:

error: argument passed to call that takes no arguments

如果你的情況很相似,這一點,你需要將財產聲明更改爲:

var categories: [String] = [] 

即使這不適合您問題,您最好檢查一下這種類型不匹配的,因爲斯威夫特3測試版6/8的Xcode:

​​

(從發行說明兩者的Xcode 8測試版6)

+0

問題是self.categories是一個NSArray ?.我認爲這個問題與排序命令有關,因爲它討論了參數。 –

+0

@JasonHocker,Swift 3正在迅速發展,Swift團隊沒有時間去完善它的診斷信息。當Swift找不到匹配的'sorted'超載時,它會返回一個預期的類型(在你的情況下是'NSArray'?),它有時會輸出這種不足且令人困惑的信息。我認爲這種糟糕的診斷應該被視爲bug,並且您最好向Apple或swift.org發送錯誤報告。 – OOPer

1

同問題在這裏。我試圖從Xcode beta官方Swift 3指南中編譯一段代碼,並得到相同的錯誤 - Argument passes to call that takes no arguments。但是,當我使用IBM Swift Sandbox時,它已成功編譯。

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"] 
func backward(_ s1: String, _ s2: String) -> Bool { 
return s1 > s2 
} 
var reversedNames = names.sorted(by: backward) 

從尋找here,似乎從 x.sorted排序改變了API(isOrderedBefore:>)來x.sorted(按:>)。我想在未來的Xcode測試版中,這將被照顧。

+0

另一種書寫方式: var reversedNames = names.sorted(by:{s1,s2 - > Bool in s1> s2}) – Edudjr