2015-11-02 37 views
5

我有一類,說Penguin斯威夫特2排序 - 無法調用「排序」類型的參數列表...

class Penguin { 
    var beakLength: Float 
} 

試圖排序的Penguins數組如下:

let penguins = [Penguin]() 
let sortedPenguins = penguins.sort { $0.beakLength < $1.beakLength } 

給出錯誤信息:

無法用''類型的參數列表調用'sort'(@noescape (企鵝,企鵝) - >布爾)」

預期類型的​​一個參數列表 '(@noescape(Self.Generator.Element, Self.Generator.Element) - >布爾)'

什麼我在這裏想念嗎?

+0

它的工作原理在我的遊樂場([截圖](https://www.evernote.com/l/AOzUny30na5PLYz4Y781afHdBJ7JU-j5Xp0))。 – Moritz

+0

這很奇怪 - 它也適用於我...但它不會編譯 –

+0

您顯示的錯誤不能來自這個簡單的片段,它的工作原樣。因此,您的項目中可能還有其他關於您的課程或您沒有展示的排序功能。請使用您的實際代碼的相關部分編輯您的問題。 – Moritz

回答

7

對於任何有同樣問題的人來說,上面的代碼示例並不完全正確。什麼是實際上更像:

var sortedPenguins = [Chimp]() 

let penguins = [Penguin]() 
sortedPenguins = penguins.sort { $0.beakLength < $1.beakLength } 

D'哦!

+1

今天遇到同樣的問題。編譯器給出了一個完全誤導性的錯誤消息。 –

0
class Penguin : CustomStringConvertible { 
    var description: String { return beakLength.description } 
    var beakLength: Float 
    init(length: Float){ 
     beakLength = length 
    } 
} 


var penguins = [Penguin]() 
penguins.append(Penguin(length: 10)) 
penguins.append(Penguin(length: 20)) 
penguins.append(Penguin(length: 5)) 
print(penguins) 
print(penguins.sort { $0.beakLength < $1.beakLength }) 
1

注意,在夫特3,所述排序函數執行的「就地」排序和不返回值(mutating func sort())。要創建原始數組的排序副本,您現在使用排序的func sorted() -> [Element])。

0

由於Sort已棄用swift3 您可以嘗試此代碼以獲取數組中的最大字符數。

let Penguin = ["as","asc","you","bce","csi","aasi","aaas","this"] 
let maxLen = penguin.sorted{ $0.characters.count > $1.characters.count} 
print(maxLen) 

結果應該是 [ 「AASI」, 「美國科學促進會」, 「此」, 「ASC」, 「你」, 「公元前」, 「CSI」, 「爲」]

+0

這甚至不試圖回答我的問題。 –

+0

我只是想提到,在迅速的「排序」,而不是「排序」的目標c。就像你可以使用penguin.sorted {$ 0.characters.count> $ 1.characters.count} –