当前位置:  开发笔记 > IOS > 正文

Swift 3.0.1中的元组比较

如何解决《Swift3.0.1中的元组比较》经验,为你挑选了1个好方法。

根据apple发布的swift编程语言(Swift 3.0.1) iBook,比较运算符也适用于元组,只要它们不包含布尔值.所以给出以下声明

let t1 = (1, true)
let t2 = (1, true)

以下句子按预期抛出错误

t1 <= t2

然而

y1 == t2

评估为真,这似乎与上述说法相矛盾.有任何想法吗?



1> dfri..:

类型Bool 确实符合Equatable,但符合Comparable

通过实施的Swift Evolution提案

SE-0015:元组比较运算符

可以比较到6的元组

等于(==)和不等式(!=),假设所有元组成员类型都符合Equatable

以及小于或等于(<=),小于(<),大于或等于(>=),大于(>),假设所有元组成员类型符合Comparable

现在,IntBool两个符合Equatable,而只有Int符合Comparable.因此,比较元组

let t1 = (1, true) // inferred type: (Int, Bool)
let t2 = (1, true)

因为两个成员都符合,所以平等/不平等是有效的Equatable.

t1 == t2 // true
t1 != t2 // false

但是,使用blueprinted的运算符Comparable无效(因为不存在这样的运算符Bool),因为两个tupes的第二个成员都有一个不符合的类型Comparable.


关于OP的评论:

似乎合乎逻辑.但是,这本书列出了比较操作==,!=,>,<,等再索赔.官方出版商是苹果.

由于所有元组成员都具有符合的类型,所以Equatable(==,!=)中的蓝色运算符可用于元组6的元组比较Equatable.但这并不意味着,然而,他们有自动获得在blueprinted运营商Comparable(<=,<,>=,>),因为类型可以遵循Equatable,但不是Comparable.

Comparable协议,不过,从继承Equatable,因此,如果一个元组的成员都符合Comparable(元组达元数6),那么所有六个比较符(==,!=,<=,<,>=,>),都可以到元组,前两者通过协议的继承Equatable,后四个通过Comparable它自己(因为符合后者的类型也必须符合前者,通过协议继承).


而且我们还有另一个金徽章持有者可以将问题作为重复问题解决!
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有