运算符

运算符分类

从操作数角度看:运算符包括一元、二元、三元。这里的一二三指操作数的数量操作数指的是被操作的数值。

从运算符位置看:运算符分为前缀、中缀、后缀。例如:!b, b + c, c!

赋值运算符

赋值运算符( a = b )可以初始化或者更新 a  为 b  的值:

如果赋值符号右侧是拥有多个值的元组,它的元素将会一次性地拆分成常量或者变量:

let (x, y) = (1, 2)
// x 等于 1, 同时 y 等于 2

与 Objective-C 和 C 不同,Swift 的赋值符号自身不会返回值。下面的语句是不合法的:

if x = y {
// 这是不合法的, 因为 x = y 并不会返回任何值。
}

这个特性避免了赋值符号 (=) 被意外地用于等于符号 (==) 的实际意图上。Swift 通过让 if x = y  非法来帮助你避免这类的错误在你的代码中出现。

算数运算符

  • 加 ( + ),:作为中缀,表示两个数值相加,如果是字符串,表示字符串拼接;作为前缀,表示正数,数值不变
  • 减 ( - ): 作为中缀,表示两个数值相减;作为前缀,表示负数
  • 乘 ( * )
  • 除 ( / )
  • 取余(%):余数运算符( a % b )可以求出多少个 b  的倍数能够刚好放进 a  中并且返回剩下的值(就是我们所谓的余数)。9 % 4 = 1, 因为 4 * 2 + 1 = 9

组合运算符

+= 、 -= 、/= 、*=

var a = 1
a += 2

表达式  a += 2 其实就是 a = a + 2  的简写。效率上来讲,加号和赋值符号组合成的一个运算符能够同时进行这两个操作。

比较运算符

下面是常规的比较运算符:

  • 相等 ( a == b )
  • 不相等 ( a != b )
  • 大于 ( a > b )
  • 小于 ( a < b )
  • 大于等于 ( a >= b )
  • 小于等于 ( a <= b )

也可以用在相同数量的元组中, 元组以从左到右的顺序比较大小,一次一个值,直到找到两个不相等的值为止。如果所有的值都是相等的,那么就认为元组本身是相等的。

Swift 标准库包含的元组比较运算符仅支持小于七个元素的元组。要比较拥有七个或者更多元素的元组,你必须自己实现比较运算符。

(1, "zebra") < (2, "apple")   // true because 1 is less than 2
(3, "apple") < (3, "bird") // true because 3 is equal to 3, and "apple" is less than "bird"
(4, "dog") == (4, "dog") // true because 4 is equal to 4, and "dog" is equal to "dog"

三目运算符

三元条件运算符是一种有三部分的特殊运算,它看起来是这样的: question ? answer1 : answer2  。这是一种基于 question  是真还是假来选择两个表达式之一的便捷写法。

三元条件运算符提供了一个非常有效的简写来决策要两个表达式之间选哪个。总之,使用三元条件运算符要小心。它的简洁性会导致你代码重用的时候失去易读的特性。避免把多个三元条件运算符组合到一句代码当中。

合并空值运算符

合并空值运算符 ( a ?? b )如果可选项 a  有值则展开,如果没有值,是 nil  ,则返回默认值 b 。表达式 a 必须是一个可选类型。表达式 b  必须与 a  的储存类型相同。

合并空值运算符是下边代码的缩写:

a != nil ? a! : b

区间运算符

闭区间运算符( a...b )定义了从 a  到 b  的一组范围,并且包含 a  和 b  。 a  的值不能大于 b 。

for index in 1...5 {
print("\(index) times 5 is \(index * 5)")
}

半开区间运算符( a..<b )定义了从 a  到 b  但不包括 b  的区间,即 半开 ,因为它只包含起始值但并不包含结束值

单侧区间:有另外一种形式来让区间朝一个方向尽可能的远。比如说,一个包含数组所有元素的区间,从索引 2 到数组的结束。在这种情况下,你可以省略区间运算符一侧的值。因为运算符只有一侧有值,所以这种区间叫做单侧区间闭区间和半开区间都有单侧区间的形式。比如说:

let names = ["Anna", "Alex", "Brian", "Jack"]

for name in names[2...] {
print(name)
}
// Brian
// Jack for name in names[...2] {
print(name)
}
// Anna
// Alex
// Brian for name in names[..<2] {
print(name)
}
// Anna
// Alex

逻辑运算符

  • 逻辑 非  ( !a ):取反
  • 逻辑 与  ( a && b ) :短路与。如果第一个值是 false  ,那么第二个值就会被忽略掉了,因为它已经无法让整个表达式再成为 true  。这就是所谓的 短路计算
  • 逻辑 或  ( a || b ):短路或。如果逻辑或运算符左侧的表达式为 true  ,那么右侧则不予考虑了,因为它不会影响到整个逻辑表达式的结果。
  • Swift 语言中逻辑运算符 && 和 || 是左相关的,这意味着多个逻辑运算符组合的表达式会首先计算最左边的子表达式。

小编为大家整理日常开发需要的逻辑运算希望对你有所帮助,青山不改,绿水长流,感谢每位佳人的支持!

iOS Swift逻辑运算符的更多相关文章

  1. iOS swift的xcworkspace多项目管理(架构思想)

    iOS  swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...

  2. iOS Swift 模块练习/swift基础学习

    SWIFT项目练习     SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图  +控件 1.UIImag ...

  3. ios swift 实现饼状图进度条,swift环形进度条

    ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...

  4. Building gRPC Client iOS Swift Note Taking App

    gRPC is an universal remote procedure call framework developed by Google that has been gaining inter ...

  5. iOS Swift WisdomScanKit图片浏览器功能SDK

    iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介      WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...

  6. iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK

    iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言:    今天给大家 ...

  7. iOS Swift WisdomHUD 提示界面框架

    iOS Swift WisdomHUD 提示界面框架  Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...

  8. iOS Swift WisdomKeyboardKing 键盘智能管家SDK

    iOS Swift WisdomKeyboardKing 键盘智能管家SDK [1]前言:    今天给大家推荐个好用的开源框架:WisdomKeyboardKing,方面iOS日常开发,优点和功能请 ...

  9. iOS swift项目IM实现,从长连接到数据流解析分析之Socket

    iOS  swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介:  去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了:       ...

随机推荐

  1. LeetCoded第739题题解--每日温度

    每日温度 请根据每日 气温 列表,重新生成一个列表.对应位置的输出为:要想观测到更高的气温,至少需要等待的天数.如果气温在这之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temper ...

  2. web项目中的浏览器行为和服务器行为

    package day10.think_about_path; import java.io.IOException; import javax.servlet.ServletException; i ...

  3. Git修改历史commit的author信息

    前言 "嘀嗒嘀嗒",抬头看向墙上的钟表,此时已是凌晨1点.小明终于把Go语言圣经第二章的笔记写完,保存commit,提交,然后睡觉. 额,等等,不对,小明发现他用的是公司的git账 ...

  4. JobExecutionContext中的JobDataMapjob与Detail与Trigger中的JobDataMapjob

    public static void main(String[] args) { //配置模式 build模式 //1.实例一个JOB JobDetail jobDetail = JobBuilder ...

  5. 使用spring向service里面注入dao不成功。

    因为原来的程序没有使用spring.后来加spring的时候action有个地方的new没有改!!! new了个新的实现层 不是spring管理的对象.

  6. shell中的引号

    单引号: 所见即所得 原封不动输出 双引号: 与单引号类似 特殊符号进行解析 ( $ $() `` ! ) 无引号: 与双引号类似 支持通配符( {} * ) 反引号: 优先执行 优先执行里面的命令, ...

  7. 20200713晚 noip14

    考场 很紧张,上午考太烂了 开场看到"影魔",想起以前看过(但没做),心态爆炸,咆哮时被 hkh diss 了 T1 一开始想建边跑最长路,每个点在记录一下 \(\min\{a\} ...

  8. Windows下安装Apollo时的几个常见问题

    今天在本地安装Apollo时遇到几个问题,觉得还是记录下来,希望能给有需要的朋友提供帮助. 安装的过程参考这篇教程,https://www.jianshu.com/p/6cf4b15ba82f.流程基 ...

  9. 注解@Component方式代替xml装配bean

    一.@Component 用注解来装配bean 1. 2.对类使用注解,装配bean: 3.类中,注入其他对象: 二.bean.xml中配置@Componet方式装配bean 1.开启注解装配bean ...

  10. FileWriter文件文件字符输出流写入存储数据

    1.FileWriter文件字符输出流-写入-存储数据 其中,流关闭之后再调用会报IOException; 其中,与文件字符输入流-写出-读取数据 和 字节输出流-写入-存储数据 不同的是,要先flu ...