Swift 学习- 03 -- 基本运算符
// 运算符是检查,改变,合并值的特殊符号或短语,
// swift 支持大部分标准的 C语言的运算符, 且改进许多特性来减少常规编码错误.
/*
如: 赋值符 (=) 不返回值, 以防止把想要判断相等运算符 (==) 的地方写成 赋值符 导致的错误. 算数运算符 (+, -, * , / , %) 等 都会检测并不允许值溢出, 以此来避免保存变量是由于变量变大或小于其类型所能承载的范围导致的异常结果, 当然允许你使用 swift 的溢出运算符来实现溢出.
swift 还提供 C语言没有的表达两数之间的值的区间运算符 (a..<b 和 a...b), 这方便我们表达一个区间内的数值
*/
// 术语
/*
运算符分为, 一元. 二元 和 三元 运算符:
1. 一元运算符对单一操作对象操作 (如 -a). 一元运算符分前置运算符和后置运算符, 前置运算符需要紧跟在操作对象之前 (如 !b) , 后置运算符需要紧跟操作对象之后 (如: c!)
2. 二元运算符操作两个操作对象 (如: 2 + 3), 是中置的, 因为他们出现在两个操作对象之间
3. 三元运算符操作三个操作对象 和 C语言一样, swift 只有一个三元运算符,就是三目运算符 (a ? b : c)
*/
// 赋值运算符 (a = b), 表示用 b 的值来初始化或更新 a 的值
// 如果赋值的右边是一个多元组, 他的与元素可以马上被你分解为多个常量或者变量
// 与C语言 和 OC 不同, swift 的赋值操作并返回任何值, 所以一下代码是错误的
/*
if x = y {
// 此句错误,因为 x = y 并不返回任何值
}
这个特性使你无法把 (==) 写成 (=) .swift 会帮你鼻片此类错误
*/
// 算数运算符
// swift 中的所有数值都支持基本的四则算数运算符
// 与C语言和 OC 语言不同的是 ,swift 默认情况下不允许在数值运算中出现一处的情况. 但是你可以使用swift 的溢出运算符来实现溢出运算 (如 : a &+ b)
// 加法的运算符也可以用于 String 的拼接 如: "Hello" + "World"
// 求余运算符
// 求余运算符 (a % b) 是计算 b 的多少倍刚刚好可以容入 a , 返回多出来的部分 余数)
// 注意:
// 求余运算符 (%) 在其他语言也叫做 '取模运算符' , 然而严格的来说, 我们看改运算符对负数的操作结果, [求余]更好
// 在对负数 b 求余时候, b 的符号会被忽略, 这意味着 a % b 和 a % -b 的结果是相同的
// 一元负号运算符 (-) 写在操作数之前, 中间没有空格
// 组合赋值运算符
// 组合运算符同C语言的组合运算符一样 ,但是没有返回值 let b = a += 2 这样写是错误的
// 比较运算符
// 所有标准的C语言的比较运算符都可以在 swift 中使用
/*
等于 (a == b)
不等于 (a != b)
大于 (a > b)
小于 (a < b)
大于等于 (a >= b)
小于等于 (a <= b)
注意:
swift 也提供恒等于(===) 和 不恒等于 (!==) 这两个比较来判断两个对象是否引用于同一个对象实例
每个比较运算符都返回另一个标识表达式是否成立的布尔值
1 == 1 // true, 因为 1 等于 1
2 != 1 // true, 因为 2 不等于 1
2 > 1 // true, 因为 2 大于 1
1 < 2 // true, 因为 1 小于2
1 >= 1 // true, 因为 1 大于等于 1
2 <= 1 // false, 因为 2 并不小于等于 1
比较运算符多用于条件语句
*/
// 当元组中的值可以比较时, 你也可以使用这些运算符来比较他们的大小, 例如, 因为 Int 和 String 类型的值可以比较, 所以类型为 (Int, String) 的元组也可以比较大小, 相反 , Bool 不能比较, 也意味着存在有 Bool 的元组不能比较
// 比较元组的大小按照从左到右, 逐值比较的方式,直到发现两个值不等时候停止, 如果所有的值都相等那么这一对元组我们认为他们是相等的
// 注意:
// swift 标准库只能比较七个以内元素的元组比较函数, 如果你的元组元素超过了七个元素个数,需要自己实现比较运算符
// 三目运算符
/*
三目运算符的特殊在于它是有三个操作数的运算符, 他的形式是 问题? 答案1 : 答案2 . 他简洁地表达根据问题 成立于否做出二选一的操作 , 如果问题 成立, 返回答案1 , 反之 返回 答案2 的结果
*/
// 空合运算符
// 空合运算符 (a ?? b) 将对可选类型 a 进行是否为空判断, 如果 a 包含一个值就进行解封, 否则就返回一个默认的值 b , 表达式 a 必须是可选类型(optional), 默认值 b 必须要和 a 存储值的类型保持一致
// 空合运算符是对一下代码的简短表达方法
// a != nil ? a! : b
// 上述代码使用了三目运算符. 当可选类型 a 的值不为空时, 进行强制解封 (a!) , 访问 a 的值, 反之返回默认值 b 的值, 无疑空合运算符提供了一种更为优雅的方式去封装条件判断和解封两种行为, 显得简洁以及更具有可读性
// 注意:
// 如果 a 为非空值 (non-nil) ,那么 b 将不会被计算, 这就是所谓的短路求值
// 例如
let defaultColorName = "red"
var userDefinedColorName: String? //默认值为 nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 的值为空,所以 colorNameToUse 的值为 "red"
// 另一种情况,分配一个非空值(non-nil)给 userDefinedColorName,再次执行空合运算,运算结果为封包在 userDefinedColorName 中的值,而非默认值。
userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 非空,因此 colorNameToUse 的值为 "green"
// 区间运算符 (Range Operators)
// Swift 提供了两个方便表达一个区间的值的区间运算符
// 闭区间运算符
// 闭区间运算符 (a...b) 定义一个包含从 a 到 b (包括 a 和 b )的所有值的区间, a 的值不能超过 b
// 半开区间运算符
// 半开区间运算符 (a..<b)定义一个 从 a 到 b 但不包括 b 的区间
// 之所以称为半开区间 , 是因为该区间包含第一个值而不包含最后的值
// 半开区间的实用性在于当你使用一个从 0 开始的列表(如数组时0), 非常方便的从0到列表长度
// 逻辑与运算符
// 逻辑运算符 (a && b) 表达只有 a 和 b 的值都为 true 时, z整个表达式的值才会是 true, 只要任意一个值为 false ,整个表达式的值就为 false, 事实上, 如果第一个值是 false ,那么就不需要计算第二个值的, 因为他已经不可能影响整个表达式的结果了, 这被称为短路计算
// 逻辑或运算符
// 逻辑或运算符(a || b)是一个由两个连续的 | 组成的中置运算符。它表示了两个逻辑表达式的其中一个为 true,整个表达式就为 true。
// 同逻辑与运算符类似,逻辑或也是「短路计算」的,当左端的表达式为 true 时,将不计算右边的表达式了,因为它不可能改变整个表达式的值了。
// 逻辑运算符组合计算
// 注意:
// Swift 逻辑操作符 && 和 || 是左结合的,这意味着拥有多元逻辑操作符的复合表达式优先计算最左边的子表达式。
// 使用括号来明确优先级
// 为了一个复杂的表达式更容易懂, 在适合的地方使用括号来明确优先级是很有效的, 虽然他并非是必要的,
Swift 学习- 03 -- 基本运算符的更多相关文章
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Swift 学习笔记(五)
126. 协议(Protocols) 协议语法(Protocol Syntax) 属性要求(Property Requirements) 方法要求(Method Requirements) Mutat ...
- Swift学习目录
本学习基于苹果官方Swift学习材料,保留了原版90%左右的内容(一些项目开发中基本不用的知识点没有整理),并根据理解进行整理.如对原版感兴趣,可以直接单击链接阅读和学习. 第一部分 基础篇 1.基本 ...
- 033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结
033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结 本文知识点:运算符和表达式知识点总结 前面学习的几篇文都是运算符和表达式相关的知 ...
- 031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级
031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级 本文知识点:Java中运算符的优先级 运算符的优先级问题 前面学习了很多的运算符,如果这些 ...
- 030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符
030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符 本文知识点:Java中的条件运算符 条件运算符是Java当中唯一一个三目运算符 什么是三目运算 ...
- 023 01 Android 零基础入门 01 Java基础语法 03 Java运算符 03 算术运算符之——自增自减运算符
023 01 Android 零基础入门 01 Java基础语法 03 Java运算符 03 算术运算符之--自增自减运算符 本文知识点:Java算术运算符中的自增自减运算符 自增自减运算符 之前我们 ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- 今天开始Swift学习
今天开始Swift学习 在此记录笔记 以备之后查阅! allenhuang
随机推荐
- MySQL之数据表(五)
1.数据表是数据库的重要内容,首先打开数据库. USE DATABASE; mysql> SHOW DATABASES;+--------------------+| Database |+-- ...
- My97DatePicker 只显示月份
<script src="../javascript/My97DatePicker/WdatePicker.js" type="text/javascript&qu ...
- Java SE之XML<一>XML文档规约
[文档整理系列] Java SE之XML<一>XML文档规约 1.xml文档引用: 1.外部私有DTD: <!DOCTYPE rootNodeName SYSTEM "ur ...
- JQuery之Attr()与Prop()方法
一.Prop()的由来 JQuery 1.6开始 新增方法prop() prop()解决:表单元素中checked,selected,disabled等属性在方法attr()中可能会出现的不一致问题( ...
- 「LibreOJ Round #6」花火
转化思维的好题! 链接:here 大致题意: 有$ n$个数字,你每次可以交换相邻两个,还有一次交换任意两个元素的机会,求最少的交换次数使得这些数字升序排序(原数列两两不同) $ solotion:$ ...
- js常见的几种继承方式
1.原型链继承 “父类”的实例作为子类的prototype SubType.prototype = new SuperType() 2.组合继承(原型链+构造函数) function SubType( ...
- 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17
黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...
- LightOJ - 1245 Harmonic Number (II) 求同值区间的和
题目大意:对下列代码进行优化 long long H( int n ) { long long res = 0; for( int i = 1; i <= n; i++ ) ...
- Windows防火墙配置(允许某个网段和部分IP访问某个端口)
1.win+R 2.gpedit.msc 3.计算机配置+Windows设置+安全设置+IP安全策略,在本地计算机 4.创建IP安全策略 5.配置IP筛选器列表.筛选器操作 6.分配 192.168. ...
- 什么是联机分析处理(OLAP)
OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来. 当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction pro ...