运算符

运算符分类

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

从运算符位置看:运算符分为前缀、中缀、后缀。例如:!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. numpy、pandas、scipy、matplotlib、jieba、 openpyxl、pillow的安装

    cmd环境下进入python安装包里的Script文件夹 安装numpy 安装pandas 安装scipy 安装matplotlib 安装jieba(应该是之前装的库安装依赖时下载了) 安装openp ...

  2. 使用dom4j工具:获取xml中的标签属性(三)

    package dom4j_read; import java.io.File; import java.util.List; import org.dom4j.Attribute; import o ...

  3. Redis(三):新数据类型

    配置文件redis.conf详解 bind=127.0.0.1 # 表示只能在本机中访问redis,将该行注释掉,即可接收任何IP地址的访问 protected-mode # 设置为no,表示关闭保护 ...

  4. ES6扩展——数组扩展

    1.结合扩展运算符使用.通过扩展运算符,在调用函数的时候,把一个数组展开,然后作为这个函数的参数 //结合扩展运算符使用 function foo(a,b,c){ console.log(a); // ...

  5. MySQL高可用主从复制简介

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 简介 1.1 概述 二 技术原理 2.1 支持的复制类型 2.2 技术特点 2 ...

  6. GoLang设计模式3 - 抽象工厂模式

    之前我们介绍了工厂设计模式,现在我们再看一下抽象工厂设计模式.抽象工程模式顾名思义就是对工厂模式的一层抽象,也是创建型模式的一种,通常用来创建一组存在相关性的对象. UML类图大致如下: 类图比较复杂 ...

  7. 根据短链生成二维码并上传七牛云(Java)

    通过短链生成二维码并上传七牛云(Java) 前言 网上这种帖子其实也是很多,大部分搜出来的是CSDN的,然后点进去一看都几乎一样:所以这次给个自己实践的例子记录. 这次也是通过搜索得到的一部分能实现这 ...

  8. K8S的部署方式

    K8S部署主要有两种方式:

  9. nRF52832蓝牙iBeacon广播

    开发环境 SDK版本:nRF5_SDK_15.0.0 芯片:nRF52832-QFAA 蓝牙iBeacon实现 iBeacon的核心就是广播,不需要进行连接,通过在广播包中插入信息然后广播出去. 广播 ...

  10. linux网络编程(一)

    ============================================================== 第一天:基本概念.TCP.FTP: =================== ...