理解闭包语法

时间:2017-04-23 11:17:12

标签: swift

我正在研究闭包,并想知道为什么以后不起作用:

let names = ["Scarlet", "Stan", "Mike", "Walter", "Jessie"]
var sortedClosure : (_ : String, _ : String) -> Bool

sortedClosure = { $0 > $1 }

names.sort(by: sortedClosure)

错误说:

  

传递给不带参数的调用的参数

但是函数按声明如下排序:

sorted(by: { (s1: String, s2: String) -> Bool in }

1 个答案:

答案 0 :(得分:3)

要改变数组import requests, bs4 res = requests.get(url) res.raise_for_status() soup = bs4.BeautifulSoup(res.text, "html.parser") print(soup.find_all('.lister-item-header')) ,必须将其变为变量。以下代码有效:

names

在此之后你有两个选择:

  • 应用var names = ["Scarlet", "Stan", "Mike", "Walter", "Jessie"] var sortedClosure : (_ : String, _ : String) -> Bool // declares closure sortedClosure = { $0 > $1 } // initializes closure 并将其分配给数组:

    sorted(by:)
  • 应用names = names.sorted(by: sortedClosure) // applies sorted(by:) and assigns the array to the newly created one ,它会改变数组:

    sort(by:)

当您第一次调用names.sort(by: sortedClosure) 时,您收到错误是因为您的sort(by:)是一个常量。由于names会使Array变异,因此它必须是变量。

然而,对于你想做的事情,我个人不会这样做。只是在"降序"中排序数组。字母顺序,你应该试试这个:

sort(by:)