2015-11-02 92 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} –