Swift 为什么有些表达式记录结果,而另一些表达式只显示迭代计数?

Swift 为什么有些表达式记录结果,而另一些表达式只显示迭代计数?,swift,swift-playground,Swift,Swift Playground,我没有和斯威夫特一起经常使用操场。我大部分时间都在项目中使用它,所以我在处理操场时有点迷失了方向 我在一个小操场上得到了这个测试代码: let array = [7, 3, 4, 9, 2, 12, 5] let firstSorted = array.sorted(<) let secondSorted = sorted(array, <) let thirdSorted = array.sorted { $0 < $1 } let数组=[7,3,4,9,2,12,5] 让

我没有和斯威夫特一起经常使用操场。我大部分时间都在项目中使用它,所以我在处理操场时有点迷失了方向

我在一个小操场上得到了这个测试代码:

let array = [7, 3, 4, 9, 2, 12, 5]
let firstSorted = array.sorted(<)
let secondSorted = sorted(array, <)
let thirdSorted = array.sorted { $0 < $1 }
let数组=[7,3,4,9,2,12,5]

让firstSorted=array.sorted(这是因为您传递到
sorted
的闭包被
sorted
调用,以便在对数组排序时进行13个元素的比较,再加上对
sorted
本身的调用。每当您编写的代码行在操场上运行时,它都会显示表达式的结果或计数。因为ne被计算了多次,IDE不能显示所有内容,所以它只显示计数

如果将其拆分为多行,则可以看到排序后的
结果,以及
$0<$1
的13次求值结果:

我想IDE可以采用最外层的结果是最有趣的方法,并显示这一点,但这可能会隐藏闭包被多次调用的信息

至于第二个问题:
sorted
的全局2参数版本更一般。它对任何类型的序列进行排序:

// they should probably rename this placeholder to S...
func sorted<C : SequenceType>
  (source: C, isOrderedBefore: (C.Generator.Element, C.Generator.Element) -> Bool) 
  -> [C.Generator.Element]
此外,由于全局函数可以基于受约束的输入重载,因此如果输入序列的元素是可比较的,则可能存在一个重载版本,该版本根本不需要比较器:

func sorted<C : SequenceType where C.Generator.Element : Comparable>
  (source: C) -> [C.Generator.Element]
func排序
(来源:C)->[C.Generator.Element]

sorted的另一件事我忘了提及——理论上,sorted的成员版本可能会更快,因为它可以了解更多关于其输入的信息,因此当您可以使用它时,它可能是首选。
func sorted<C : SequenceType where C.Generator.Element : Comparable>
  (source: C) -> [C.Generator.Element]