【问题标题】:Swift 2 sorting - Cannot invoke 'sort' with an argument list of type…Swift 2 排序 - 无法使用类型参数列表调用“排序”...
【发布时间】:2017-07-20 05:50:30
【问题描述】:

我有课,比如Penguin

class Penguin {
   var beakLength: Float
}

尝试对Penguins 的数组进行如下排序:

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

给出错误信息:

不能使用类型为 '(@noescape 的参数列表调用 'sort' (Penguin, Penguin) -> Bool)'

需要一个类型为 '(@noescape (Self.Generator.Element, Self.Generator.Element) -> Bool)'

我在这里错过了什么?

【问题讨论】:

  • 它可以在我的 Playground (screenshot) 中使用。
  • 这很奇怪 - 它也适用于我......但它不会编译
  • 您显示的错误不能来自这个简单的 sn-p,它可以正常工作。因此,您的项目中可能还有其他关于您的课程或排序功能的内容,您没有展示。请使用您的实际代码的相关部分编辑您的问题。
  • 哈哈!!知道了!!排序的结果被分配给错误类型的变量。感谢您的输入。我会把它打开,以纪念我的愚蠢!
  • @Ashley Mills...“纪念我的愚蠢”...不能给你足够的支持,兄弟...你的纪念是我的镜子,反映了我自己的,相同的,愚蠢:-)跨度>

标签: sorting swift2


【解决方案1】:

对于任何有同样问题的人来说,上面的代码示例并不完全正确。 实际上更像:

var sortedPenguins = [Chimp]()

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

天哪!

【讨论】:

  • 今天遇到同样的问题。编译器给出了一个完全误导性的错误信息。
【解决方案2】:

请注意,在 Swift 3 中,sort 函数执行“就地”排序并且不返回值 (mutating func sort())。要创建原始数组的排序副本,您现在使用 sorted (func sorted() -&gt; [Element])。

【讨论】:

    【解决方案3】:
    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 })
    

    【讨论】:

      【解决方案4】:

      由于 swift3 不推荐使用 Sort 您可以尝试使用此代码获取数组中的最大字符数。

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

      结果应该是 [“aasi”、“aaas”、“this”、“asc”、“you”、“bce”、“csi”、“as”]

      【讨论】:

      • 这甚至没有试图回答我的问题。
      • 我只想提一下,在 swift 中,它的“排序”而不是目标 c 的“排序”。就像你可以使用 penguin.sorted { $0.characters.count > $1.characters.count}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多