gpt4 book ai didi

swift - Swift 3.0.1 中的元组比较

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:37 25 4
gpt4 key购买 nike

根据苹果出版的The swift programming language (Swift 3.0.1) iBook,比较运算符也适用于元组,只要不包含 bool 值即可。所以给出以下声明

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

下面的语句按预期抛出错误

t1 <= t2

y1 == t2

评估为真,这似乎与上述声明相矛盾。有什么想法吗?

最佳答案

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

通过已实现的 Swift Evolution 提案

最多可以比较元数为 6 的元组

  • 等式 ( == ) 和不等式 ( != ),假设所有元组成员类型都符合 Equatable
  • 以及小于或等于(<=)、小于(<)、大于或等于(>=)、大于(>),假定所有元组成员类型符合 Comparable

现在, Int Bool 都符合 Equatable ,而只有 Int符合 Comparable .因此,比较元组

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

对于相等/不相等是有效的,因为两个成员都符合 Equatable .

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

但是,使用 Comparable 中设计的运算符无效(因为 Bool 不存在此类运算符),因为两个元组的第二个成员的类型不符合 Comparable .


关于 OP:s 的评论:

Seems logical. But the book lists comparison operators ==, !=, >, <, etc. and then the claim. The official publisher is apple.

Equatable 中的运算符( == , != ) 可用于最高元数为 6 的元组比较,前提是所有元组成员都具有符合 Equatable 的类型.然而,这意味着它们可以自动访问 Comparable 中设计的运算符。 ( <= , < , >= , > ),因为类型可能符合 Equatable但不是 Comparable .

Comparable然而,协议(protocol)继承自 Equatable , 所以如果一个元组的成员都符合 Comparable (对于最多 6 个元组),那么所有六个比较运算符( ==!=<=<>=> )都可用于该元组,前两个通过协议(protocol)继承自 Equatable , 后四个通过 Comparable本身(因为符合后者的类型也必须符合前者,通过协议(protocol)继承)。

关于swift - Swift 3.0.1 中的元组比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41743305/

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