iOS Swift逻辑运算符示例总结

目录
  • 运算符分类
  • 赋值运算符
  • 算数运算符
  • 组合运算符
  • 比较运算符
  • 三目运算符
  • 合并空值运算符
  • 区间运算符
  • 逻辑运算符
  • 总结

运算符分类

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

从运算符位置看:运算符分为前缀、中缀、后缀。例如:!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逻辑运算符的文章就介绍到这了,更多相关iOS Swift逻辑运算符内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Swift教程之基本运算符详解

    运算符是一种特定的符号或表达式,用来检验.修改或合并变量.例如,用求和运算符+可以对两个数字进行求和(如let i = 1 + 2):稍微复杂一点的例子有逻辑与操作符&& (如if enteredDoorCode && passedRetinaScan) ,自增长运算符 ++i (这是i=i+1的简写方式) Swift支持C标准库中的大多数运算符并提升了各自的兼容性,从而可以排除常见的编码错误.赋值操作符 (=)不会返回一个值,这样可以防止你因粗心将赋值运算符 (=)写成

  • swift中自定义正则表达式运算符=~详解

    什么是正则表达式? 正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. swift 至今并没有在语言层面上支持正则表达式,可能在开发app时正则表达式使用的场景并不多. 封装 在 Cocoa 中我们可以使用 NSRegularExpression 来做

  • Swift心得笔记之运算符

    空值合并运算符和区间运算符 今天主要看的内容是 Swift 中的基本运算符.记录一下. Nil Coalescing Operator a ?? b 中的 ?? 就是是空值合并运算符,会对 a 进行判断,如果不为 nil 则解包,否则就返回 b . var a: String? = "a" var b: String? = "b" var c = a ?? b // "a" a = nil c = a ?? b // "b"

  • iOS Swift开发之日历插件开发示例

    本文介绍了iOS Swift开发之日历插件开发示例,分享给大家,具体如下: 效果图 0x01 如何获取目前日期 关于日期,苹果给出了 Date 类,初始化一个 Date 类 let date = Date() 打印出来就是当前系统的日期和时间 那么如何单独获得当前年份,月份呢? var date: [Int] = [] let calendar: Calendar = Calendar(identifier: .gregorian) var comps: DateComponents = Dat

  • iOS Swift控制器转场动画示例代码

    前言 在IOS开发中,我们model另外一个控制器的时候,一般都使用默认的转场动画.本文将给大家详细介绍关于iOS Swift控制器转场动画的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 返回效果也可更改 四种转场动画 1. move:源图片位置移动到目标图片位置: 2. circle:根据源控件大小创建圆形或者椭圆形path路径,放大展示目标: 3. tier:源左右,目标由小到大缩放: 4. middle:源的中心点开始放大,返回是缩回到中心. 代码解析 给UI

  • iOS Swift创建代理协议的多种方式示例

    前言 本文主要给大家介绍了iOS Swift创建代理协议的各种方式,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 假如有一个类为 LXFView,现在要为这个类创建一个代理协议,我们该如何做呢? 首先,代理协议的命名方式:类名 + Delegatev protocol LXFViewDelegate { func view(_ view: LXFView) } 当我们创建的协议遵守其它协议的情况下,只是这样写并不会报错,接下来我们在LXFView中添加一个代理属性,为避免循环

  • iOS swift 总结NavigationController出现问题及解决方法

    IOS swift 总结NavigationController出现问题及解决方法 最近用Swift语言做了一些iOS项目,颇有些心得,记下一些深刻的问题造福自己,服务大家 1.以NavigationController做为容器后状态栏的字体颜色就会不在受系统的控制,要在NavigationController中的根ViewController中设置方可生效,代码如下: self.navigationController!.navigationBar.barStyle = UIBarStyle.

  • IOS Swift基础之switch用法详解

    IOS  Swift基础之switch用法详解 概述 Swift中的switch语句与Java等语言中的switch有很大的相似点,但是也有不同的地方,并且更加灵活. Swift中switch的case语句中不需要添加break Swift中需要考虑所有情况,default是必要的. case分支可以添加多个条件,用,分割 case不局限与常量,可以使使用范围 switch里可以使用元组 switch默认不需要添加break,执行一个case之后就跳出语句,如果想要继续下面的语句可以使用fall

  • IOS swift中的动画的实例详解

    IOS swift中的动画的实例详解 UIView的通用动画 let view = UIView(frame: CGRectMake(10.0, 10.0, 100.0, 40.0)) self.view.addSubview(view) view.backgroundColor = UIColor.lightGrayColor() // 位置改变 var frame = view.frame UIView.animateWithDuration(0.6, delay: 2.0, options

  • iOS swift实现转场动画的方法示例

    转场动画介绍 转场动画在我们日常开发中是经常遇到的,所谓转场动画,就是一个控制器的view切到另一个控制器的view上过程中过的动画效果.本例子是实现了在导航控制器的titleView边上慢慢弹出一个控制器.下面话不多说,来一起看看详细的介绍: 效果图: 专场前 专场后 示例代码 首先自定义一个animator类.在需要转场的控制器内,设置代理 //需要设置转场动画的控制器titleViewVc.transitioningDelegate = aniamator//这里的animator是ani

  • iOS Swift UICollectionView横向分页滚动,cell左右排版问题详解

    情况 Swift对于一门新的iOS编程语言,他的崛起是必然的,我们这群老程序员们学习新的技能也是必然的,不接受新技能将被这大群体无情的淘汰. 最近因为工作的需求,在做表情键盘时遇到一个问题,我用UICollectionView来布局表情,使用横向分页滚动,但在最后一页出现了如图所示的情况 情况分析图 是的,现在的item分布就是这个鬼样子 现在想要做的,就是将现在这个鬼样子变成另外一种样子,如图 那怎么办?只好重新布局item了 解决方案 我是自定了一个Layout(LXFChatEmotion

  • iOS Swift利用UICollectionView实现无限轮播功能(原理)详解

    前言 作为一个资深(自认为)iOS程序猿,会经常用到轮播图,上一次使用UIScrollView实现无限轮播的效果,这一次在Swift语言中,我使用UICollectionView再为大家讲解一次无限轮播的实现原理. 先上图: UICollectionView-无限轮播.gif 首先需要实现了就是UICollectionView的分页,这个很简单: collectionView.isPagingEnabled = true 接下来就是原理,在UICollectionView的两端需要先添加两张图片

  • iOS Swift读取本地json文件报错的解决方法

    前言 最近闲来无聊,本地了一个json读取,但没想到在用Swift测试数据发现加载本地json文件一直报以下错误: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with a

随机推荐

其他