我正在研究闭包,并想知道为什么以后不起作用:
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 }
答案 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:)