Swift 元组

Swift 元组

元组比较

  • 两个相同元素类型的元组,如果每个元素都遵循了 Equatable 协议,那么这两个元组对象可以用 == 操作符以及 != 操作符来判别两者是否相等。如果两个元组对象中的每个元素的值都相等,那么这两个元组对象是相等的,否则它们是不等的。

例:
let t1 = (1, 2, 3) let t2 = (1, 2, 3)
// 判断元组t1与t2是否相等,
// 结果为true
print("t1 == t2? (t1 == t2)")

  • 两个相同元素类型的元组,如果每个元素都遵循了 Equatable 协议,那么这两个元组对象可以用 == 操作符以及 != 操作符来判别两者是否相等。如果两个元组对象中的每个元素的值都相等,那么这两个元组对象是相等的,否则它们是不等的。

// 这句也会引发编译报错,
// 因为布尔类型不遵循Comparable协议,
// 所以不能进行比较,
// 尽管这里的Int与Double可进行比较
例:b = (true, 1, 2.0) > (false, 2, -1.0)

空元组

  • “所谓空元组就是一个不包含任何元素的元组,即 () 。Swift编程语言中对空元组有一个非常特殊的定义——既可以将它用来作为对象或函数的类型进行声明,也可以将它作为右值。当作为对象或函数的类型声明时,它表示无,即相当于C语言中的 void 。当作为类型使用时,我们往往使用 Void 来显式标出。在Swift编程语言中,Void 其实就是用空元组来定义的。当空元组作为右值时,它表示一个空表达式,并且类型为 Void。这里大家要注意的是,如果空元组作为右值使用,那么就不能写 Void,而必须直接用 ()。因为 Void 是以类型的方式定义的,而不是以值的方式。”

  • 空表达式(即 void 表达式)与空值表达式(nil 表达式)是有本质区别的。前者表示不具有任何类型,除了通配符(_)以及表示 Void 的对象之外,不能赋值给其它任何类型的对象。而空值 nil 则可赋值给任一Optional对象,表示其当前引用为空。

例:
// 声明一个Void类型的常量v
let v: Void
// 用空元组对v初始化
v = ()
// 将v赋值给缺省对象说明符,
// 这条语句是一条空语句,
// 编译器会直接将它忽略
_ = v
var a = 10
// 这里需要对result显式标明Void类型,
// 否则会有编译警告
let result: Void = a += 100
// 空元组值也可以被打印出来,
// 输出:result = (), a = 110
print("result = \(result), a = \(a)")
// 这里先提前说明一下,
// 空元组也能赋值给Any类型的对象 µ
let obj: Any = result
// 我们甚至还可以用is来判断Void对象的类型
let isVoid = obj[…]
// 输出:isVoid? true
print("isVoid? \(isVoid)")

  var loop = 3
  repeat {
      print("Hello, world!")
  } while (loop -= 1, loop).1 > 0
   
  // 这条if语句已经显示出了警告:
  // 'is'测试总是为真
  if (loop -= 1, loop).0 is Void {
      print("Yes, it's void!")
  }
  • 在Swift中可以将对象显式声明为 Void 类型,这一点比起其他类C语言都要灵活。这看似没什么实际作用,但却给Swift语法体系带来了完备性。我们可以看到,() 中如果包含了2个或更多个类型,那么它就是一个元组,所以在数学上我们可以将元组看作为一个向量类型;而如果在 () 中只包含一个类型,那么它就是一个普通的标量类型;而如果在 () 中什么都没有呢?那么它就是“虚无”的存在。只不过“虚无”在Swift编程语言中可以以一种特殊的对象身份出现。不管怎么说,“真空”也算是一个“对象。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容