ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

运算符

2021-10-08 22:01:16  阅读:157  来源: 互联网

标签:元组 运算符 区间 Swift 溢出 赋值


最困难的事情就是认识自己。

一. 前言

  Swift 支持大部分标准 C 语言的运算符,且为了减少常见编码错误做了部分改进。如:赋值符(=)不再有返回值,这样就消除了手误将判等运算符(==)写成赋值符导致代码错误的缺陷。算术运算符(+-*/% 等)的结果会被检测并禁止值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致的异常结果。当然允许你使用 Swift 的溢出运算符来实现溢出。Swift 还提供了 C 语言没有的区间运算符,例如 a..<ba...b,这方便我们表达一个区间内的数值。此章节主要记录Swift语言运算符的一些新特性,对于基于C语言等基础语言标准的运算符不做介绍。

二. 基础运算符

1. 赋值运算符

  与 C 语言和 Objective-C 不同,Swift 的赋值操作(=)并不返回任何值,这样就消除了手误将判等运算符(==)写成赋值符导致代码错误的缺陷,例如:

if x = y {
    // 此句错误,因为 x = y 并不返回任何值
}

2. 算术运算符

  与 C 语言和 Objective-C 不同的是,Swift 默认情况下不允许在数值运算中出现溢出情况。但是你可以使用 Swift 的溢出运算符来实现溢出运算(如 a &+ b)。

  加法运算符(+)也可用于 String 的拼接:

let str1 = "Hello, "
let str2 = "World"
var str12 = str1 + str2 // "Hello, World"

3. 比较运算符

  所有标准 C 语言中的比较运算符都可以在 Swift 中使用。Swift 也提供恒等(===)和不恒等(!==)这两个比较符来判断两个对象是否引用同一个对象实例。

  元组的比较,如果两个元组的元素相同,且长度相同的话,元组就可以被比较。比较元组大小会按照从左到右、逐值比较的方式,直到发现有两个值不等时停止。如果所有的值都相等,那么这一对元组我们就称它们是相等的。但是Swift 标准库只能比较七个以内元素的元组比较函数。如果你的元组元素超过七个时,你需要自己实现比较运算符。

4. 空合运算符

  空合运算符(Nil Coalescing Operator):(a ?? b)将对可选类型 a 进行空判断,如果 a 包含一个值就进行解包,否则就返回一个默认值 b。表达式 a 必须是 Optional 类型。默认值 b 的类型必须要和 a 存储值的类型保持一致。

  空合运算符是对以下代码的简短表达方法:

a != nil ? a! : b

  上述代码使用了三元运算符。当可选类型 a 的值不为空时,进行强制解封(a!),访问 a 中的值;反之返回默认值 b。无疑空合运算符(??)提供了一种更为优雅的方式去封装条件判断和解封两种行为,显得简洁以及更具可读性。

5. 区间运算符

  Swift 提供了几种方便表达一个区间的值的区间运算符(Range Operators)。

  • 闭区间运算符(a...b)定义一个包含从 ab(包括 ab)的所有值的区间。a 的值不能超过 b

  • 半开区间运算符(a..<b)定义一个从 ab 但不包括 b 的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。

  • 单侧区间,可以表达往一侧无限延伸的区间。

    • 单侧区间的闭区间表达形式:

      a...

      ...b

    • 单侧区间的半开区间表达形式:

      ..<b

标签:元组,运算符,区间,Swift,溢出,赋值
来源: https://www.cnblogs.com/hubert-style/p/15383093.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有