加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 为什么有些表达式记录结果而其他表达式只显示迭代计数

发布时间:2020-12-14 04:33:14 所属栏目:百科 来源:网络整理
导读:我没有和 Swift一起使用游乐场.大多数时候我一直在项目中使用它,所以我在与游乐场打交道时有点迷失. 我在一个小游乐场买了这个测试代码: let array = [7,3,4,9,2,12,5]let firstSorted = array.sorted()let secondSorted = sorted(array,)let thirdSorted =
我没有和 Swift一起使用游乐场.大多数时候我一直在项目中使用它,所以我在与游乐场打交道时有点迷失.

我在一个小游乐场买了这个测试代码:

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

右侧显示的输出显示firstSorted和secondSorted旁边的排序数组输出.然而,ThirdSorted旁边的输出只是说(15次).

为什么?如何在不添加单独的println命令来记录输出的情况下查看输出?

第三种形式有一个尾随闭包,其参数由它们的位置指定.

另外两个是一个更短的形式,只采用比较运算符,恰好匹配所需的闭包的签名.

另一个问题:(这次关于语言,而不是游乐场)为什么sorted(array,<)和array.sorted(<)形式都有效?第一个是带有2个参数的全局函数,第二个是Array类的方法.

解决方法

这是因为你传递给sorted的闭包是通过排序调用来进行13个元素的比较,因为它对数组进行排序,再加上对自身排序的调用.每当您编写的代码行在操场中运行时,它会显示表达式的结果或计数.由于多次评估同一行,因此IDE无法显示所有内容,因此它只显示计数.

如果你把它分成多行,你可以看到排序的结果,以及$0< 0的13次评估的结果. $1: 我想IDE可以采用最外层结果最有趣的方法,并显示,但这可能隐藏了多次调用闭包的信息. 至于第二个问题:排序的全局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]

所以你可以传入任何符合SequenceType的东西:

// results in [4,1,0]
sorted(0..<5,>)  

// results in [(3,"bob"),(2,"fred")] because dictionary’s 
// SequenceType representation is unordered pairs
sorted([2:"fred",3:"bob"]) { $0.1 < $1.1 }

此外,由于全局函数可以基于约束输入进行重载,因此如果输入序列的元素是Comparable,则可能存在根本不需要比较器的重载版本:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读