gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:18:12 27 4
gpt4 key购买 nike

在 playground 中尝试以下操作时,出现以下错误:

Cannot invoke 'sort' with an argument list of type '([Int], (Int, Int) -> Bool)'

let stuff = [1, 2, 3]
var sortedStuff = sort(stuff, { (left: Int, right: Int) -> Bool in left < right })

我做错了什么吗?

最佳答案

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

var stuff = [3, 2, 1]
sort(&stuff, { (left: Int, right: Int) -> Bool in left < right })
println(stuff) // [1, 2, 3]

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

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

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]

函数名称在较早的测试版之一中已更改,如中所述发行说明

Important Changes, Issues Resolved in Xcode 6 beta 1–3
...
The global sort function now mutates its first argument, and a new sorted function always returns a new collection.

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

如评论中所述,您可以通过多种方式缩短闭包符号:

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

所有这些都在 "Closures" 中有详细描述。 Swift 书的章节。


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

let stuff = [3, 2, 1]
let sortedStuff = stuff.sort(<)
print(sortedStuff) // [1, 2, 3]

原地排序数组已重命名为“sortInPlace”:

var stuff = [3, 2, 1]
stuff.sortInPlace(<)
print(stuff) // [1, 2, 3]

关于xcode 6 beta 6 sort() 似乎不像 Swift 文档所说的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com