首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xcode 6 beta 6 sort()似乎不像Swift文档所说的那样工作

xcode 6 beta 6 sort()似乎不像Swift文档所说的那样工作
EN

Stack Overflow用户
提问于 2014-08-25 20:54:47
回答 1查看 2.9K关注 0票数 2

在操场上尝试下列操作时,会出现以下错误:

代码语言:javascript
复制
Cannot invoke 'sort' with an argument list of type '([Int], (Int, Int) -> Bool)'
代码语言:javascript
复制
let stuff = [1, 2, 3]
var sortedStuff = sort(stuff, { (left: Int, right: Int) -> Bool in left < right })

我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-25 21:00:42

sort()就地对数组进行排序:

代码语言:javascript
复制
var stuff = [3, 2, 1]
sort(&stuff, { (left: Int, right: Int) -> Bool in left < right })
println(stuff)   // [1, 2, 3]

sort()的第一个参数必须是变量数组的地址(并且它不返回值)。这将导致(误导)错误消息,因为您将数组作为第一个参数传递。

您可能希望使用的是sorted(),它不会修改原始数组并返回一个新的排序数组:

代码语言:javascript
复制
let stuff = [3, 2, 1]
var sortedStuff = sorted(stuff, { (left: Int, right: Int) -> Bool in left < right })
println(stuff)          // [3, 2, 1]
println(sortedStuff)    // [1, 2, 3]

函数名在一个较早的beta版本中已经更改,正如发行说明中提到的那样。

重要的更改,Xcode 6 beta 1-3中解决的问题 ..。 全局sort函数现在会变异它的第一个参数,并且一个新的sorted函数总是返回一个新集合。

所以有些教程可能已经过时了。然而,Swift的书籍是定期更新的,所以您可能需要下载当前版本。

正如注释中提到的,您可以通过各种方式缩短闭包表示法:

代码语言:javascript
复制
let sortedStuff = sorted(stuff, { left, right in left < right })  // Inferring type from context
let sortedStuff = sorted(stuff, { $0 < $1 })  // Shorthand argument names
let sortedStuff = sorted(stuff, <)  // Using an operator function

所有这些在Swift书的“关闭”章节中都有详细的描述。

更新Swift 2 (Xcode 7):返回排序数组的再次称为“排序”,但它现在是(协议扩展)方法,而不是全局函数:

代码语言:javascript
复制
let stuff = [3, 2, 1]
let sortedStuff = stuff.sort(<)
print(sortedStuff)   // [1, 2, 3]

并将适当的数组排序重命名为"sortInPlace":

代码语言:javascript
复制
var stuff = [3, 2, 1]
stuff.sortInPlace(<)
print(stuff)   // [1, 2, 3]
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25494236

复制
相关文章

相似问题

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