arrays - .sorted(by : ) method) 中的括号

标签 arrays swift sorting

例如我有一个数组:

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() 只返回一个 Boolsorted(by:) 不能将 Bool 作为参数。此外,尝试调用 sortedAscending() 失败,因为它需要两个 Int 参数,而您没有提供任何参数。

当然,错误消息完全是误导性的,让它听起来像是错误与实际情况完全不同,因为 Swift。

关于arrays - .sorted(by : ) method) 中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017906/

相关文章:

c - 将 FILE* 指针从 Swift 传递给 C 函数

java - 如何从数组中获取 5 个数字的序列

ios - SKPhysicsBody 看起来很小

iphone - 在我的设备上使用 Xcode (iPhone 6+) 进行编译时出错

c# - List索引和Array索引的区别

c++ - 在有限比较的数组中找到一个元素?

python - 如何在 Python 中不使用循环和 join() 将列表转换为字符串

bash - 使用 "Sort"根据时间戳对终端中的 CSV 进行排序

arrays - 将项目添加到对象中

javascript - 如何将对象数组转换为对象的对象