例如我有一个数组:
let myArray = [12,123,412,412,4,124,32]
我希望它按升序排序,我为它创建了一个函数
func sortedAscending(_ i: Int , _ j: Int) -> Bool{ return i < j }
然后我创建变量来存储新的排序数组
let newSorted = myArray.sorted(by : sortedAscending())
在这里,编译器给我这样的错误:error: argument passed to call that takes no arguments 当我删除括号时,它工作正常。谁能解释为什么我应该在不带括号的情况下调用函数 sortedAscending?
最佳答案
原因是因为当您不带括号传递 sortedAscending
时,您传递的是闭包本身 作为参数。事实上,这就是您想要做的,因为您要告诉 sorted(by:)
使用传入的闭包进行排序。
相比之下,如果将括号添加到 sortedAscending()
,则告诉编译器首先执行闭包,然后传递结果 到 sorted(by:)
。如果 sortedAscending()
返回另一个采用两个 Int
的闭包,这可以工作,但在您的情况下,sortedAscending()
只返回一个 Bool
和 sorted(by:)
不能将 Bool
作为参数。此外,尝试调用 sortedAscending()
失败,因为它需要两个 Int
参数,而您没有提供任何参数。
当然,错误消息完全是误导性的,让它听起来像是错误与实际情况完全不同,因为 Swift。
关于arrays - .sorted(by : ) method) 中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017906/