首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.sorted(by:)方法中的括号

.sorted(by:)方法中的括号
EN

Stack Overflow用户
提问于 2017-09-02 20:30:31
回答 2查看 334关注 0票数 1

例如,我有一个数组:

代码语言:javascript
复制
let myArray = [12,123,412,412,4,124,32]

我希望它以升序的方式排序,我为它创建一个函数

代码语言:javascript
复制
func sortedAscending(_ i: Int , _ j: Int) -> Bool{ return i < j }

然后创建用于存储新排序数组的变量。

代码语言:javascript
复制
let newSorted = myArray.sorted(by : sortedAscending())

在这里,编译器给出了错误,比如: error:传递给调用的参数,当我删除括号时不使用参数,它工作得很好。有人能解释我为什么要调用一个没有括号的函数sortedAscending吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-02 20:37:41

原因是当您不带括号地传递sortedAscending时,您将闭包本身作为参数传递。事实上,这就是您想要做的,因为您告诉sorted(by:)使用传入的闭包来进行排序。

相反,如果将括号添加到sortedAscending()中,将告诉编译器先执行闭包,然后将结果传递给sorted(by:)。如果sortedAscending()返回另一个包含两个Int的闭包,这可以工作,但在您的示例中,sortedAscending()只返回Bool,而sorted(by:)不能将Bool作为参数。此外,调用sortedAscending()的尝试失败,因为它需要两个Int参数,而您没有提供任何参数。

当然,错误信息是完全误导的,使之听起来像是错误与实际情况完全不同,因为Swift。

票数 2
EN

Stack Overflow用户

发布于 2017-09-02 20:38:22

sorted(by:)函数需要一个闭包作为参数。通过在sortedAscending之后添加括号,您实际上正在尝试调用sortedAscending函数(没有参数),并将sortedAscending函数的返回值作为参数传递给sorted(by:)

通过消除括号,可以正确地传递函数作为闭包参数。

但你不需要什么功能。只要做:

代码语言:javascript
复制
let newSorted = myArray.sorted { $0 < $1 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46017906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档