Swift 学习总结二:运算符及流程控制

Swift 运算符

运算符是一个符号,用于告诉编译器执行一个数学或逻辑运算。

Swift 提供了以下几种运算符:

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 区间运算符
  • 其他运算符

算术运算符

以下表格列出了 Swift 语言支持的算术运算符,其中变量 A 为 10,变量 B 为 20:

运算符描述实例
+加号A + B 结果为 30
减号A − B 结果为 -10
*乘号A * B 结果为 200
/除号B / A 结果为 2
%求余B % A 结果为 0

注意:swift3 中已经取消了++、- -。

比较运算符

以下表格列出了 Swift 语言支持的比较运算符,其中变量 A 为 10,变量 B 为 20:

运算符描述实例
==等于(A == B) 为 false。
!=不等于(A != B) 为 true。
>大于(A > B) 为 false。
<小于(A < B) 为 true。
>=大于等于(A >= B) 为 false。
<=小于等于(A <= B) 为 true。

逻辑运算符

以下表格列出了 Swift 语言支持的逻辑运算符,其中变量 A 为 true,变量 B 为 false:

运算符描述实例
&&逻辑与。如果运算符两侧都为 TRUE 则为 TRUE。 (A && B) 为 false。
||逻辑或。如果运算符两侧至少有一个为 TRUE 则为 TRUE。 (A || B) 为 true。
!逻辑非。布尔值取反,使得true变false,false变true。 !(A && B) 为 true。

位运算符

如果指定 A = 60; 及 B = 13; 两个变量对应的二进制为:

A = 0011 1100
B = 0000 1101

进行位运算

运算符描述实例
&按位与。按位与运算符对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1。(A & B) 结果为 12, 二进制为 0000 1100
|按位或。按位或运算符|比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1)。(A | B) 结果为 61, 二进制为 0011 1101
^按位异或. 按位异或运算符^比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0。(A ^ B) 结果为 49, 二进制为 0011 0001
~按位取反运算符~对一个操作数的每一位都取反。(~A ) 结果为 -61, 二进制为 1100 0011 in 2’s complement form.
<<按位左移。左移操作符(<<)将操作数的所有位向左移动指定的位数。A << 2 结果为 240, 二进制为 1111 0000
>>按位右移。右移操作符(>>)将操作数的所有位向右移动指定的位数。A >> 2 结果为 15, 二进制为 0000 1111

赋值运算

下表列出了 Swift 语言的基本赋值运算:

运算符描述实例
=简单的赋值运算,指定右边操作数赋值给左边的操作数。C = A + B 将 A + B 的运算结果赋值给 C
+=相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。C += A 相当于 C = C + A
-=相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。C -= A 相当于 C = C - A
*=相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。C *= A 相当于 C = C * A
/=相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。C /= A 相当于 C = C / A
%=求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。C %= A is equivalent to C = C % A
<<=按位左移后再赋值C <<= 2 相当于 C = C << 2
>>=按位右移后再赋值C >>= 2 相当于 C = C >> 2
&=按位与运算后赋值C &= 2 相当于 C = C & 2
^=按位异或运算符后再赋值C ^= 2 相当于 C = C ^ 2
|=按位或运算后再赋值C |= 2 相当于 C = C | 2

区间运算符

Swift 提供了两个区间的运算符。

运算符描述实例
闭区间运算符闭区间运算符(a…b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于等于a。 ‌ 闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in循环中:1…5 区间值为 1, 2, 3, 4 和 5
半开区间运算符半开区间(a…1…< 5 区间值为 1, 2, 3, 和 4

以下为区间运算的简单实例:

import Cocoa

print("闭区间运算符:")
for index in 1...5 {
    print("\(index) * 5 = \(index * 5)")
}

print("半开区间运算符:")
for index in 1..<5 {
    print("\(index) * 5 = \(index * 5)")
}

以上程序执行结果为:

闭区间运算符:
1 * 5 = 5
2 * 5 = 10
3 * 5 = 15
4 * 5 = 20
5 * 5 = 25
半开区间运算符:
1 * 5 = 5
2 * 5 = 10
3 * 5 = 15
4 * 5 = 20

其他运算符

Swift 提供了其他类型的的运算符,如一元、二元和三元运算符。

  • 一元运算符对单一操作对象操作(如-a)。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在操作对象之前(如!b),后置运算符需紧跟在操作对象之后(例如c!)。备注:在Java/C没有类似c!的语法, 在Swift中用在Optional类型取值。
  • 二元运算符操作两个操作对象(如2 + 3),是中置的,因为它们出现在两个操作对象之间。
  • 三元运算符操作三个操作对象,和 C 语言一样,Swift 只有一个三元运算符,就是三目运算符(a ? b : c)。
运算符描述实例
一元减数字前添加 - 号前缀-3 或 -4
一元加数字前添加 + 号前缀+6 结果为 6
三元运算符condition ? X : Y如果 condition 为 true ,值为 X ,否则为 Y

运算符优先级

在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。

基本的优先级需要记住:

  • 指针最优,单目运算优于双目运算。如正负号。
  • 先乘除(模),后加减。
  • 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7
  • 逻辑运算最后计算

Swift 运算符优先级 (从高到低):

运算符实例
位运算符>> &<< &>> >>
乘法运算符&* % & * /
加法运算符| &+ &- + - ^
区间运算符…< …
类型转换运算符is as
nil 的聚合运算??
比较运算符!= > < >= <= === ==
逻辑与运算符&&
逻辑或运算符||
波浪箭头~>
三元运算符?:
箭头函数( )
赋值运算符|= %= /= &<<= &>>= &= *= >>= <<= ^= += -=

Swift流程控制

Swift 提供了以下几种类型的条件语句:

语句描述
if 语句if 语句 由一个布尔表达式和一个或多个执行语句组成。
if…else 语句if 语句 后可以有可选的 else 语句, else 语句在布尔表达式为 false 时执行。
if…else if…else 语句if 后可以有可选的 else if…else 语句, else if…else 语句常用于多个条件判断。
switch 语句switch 语句允许测试一个变量等于多个值时的情况。
guard 语句
  • switch-可以判断单个值及多个值,可以判断浮点型, 字符串, 区间

一般在 switch 语句中不使用 fallthrough 语句。

这里我们需要注意 case 语句中如果没有使用 fallthrough 语句,则在执行当前的 case 语句后,switch 会终止,控制流将跳转到 switch 语句后的下一行。

如果使用了fallthrough 语句,则会继续执行之后的 case 或 default 语句,不论条件是否满足都会执行。

注意:在大多数语言中,switch 语句块中,case 要紧跟 break,否则 case 之后的语句会顺序运行,而在 Swift 语言中,默认是不会执行下去的,switch 也会终止。如果你想在 Swift 中让 case 之后的语句会按顺序继续运行,则需要使用 fallthrough 语句。


        switch score {
        case 0..<60:    //开区间
            print("不及格")
        case 60..<80:
            print("及格")
        case 80..<90:
            print("良好")
        case 90...100:   //闭区间 包括100
            print("优秀")
        default:
            print("不合理分数")
        }
        
        switch score {
        case 70,80,90,100:   //多个值
            print("卡在线上")
        default:
            print("没卡在线上")
        }
        
        let str = "+"
        var rs = 0
        switch str {
        case "+":        //判断字符串
            rs = m + n
        default:
            print("不算了")
        }
        print(rs)
  • guard 守卫
        let score = 92
        guard score > 60 else {
            print("不及格")
            return;
        }
        print("及格")

Swift 循环

循环类型

Swift 语言提供了以下几种循环类型。点击链接查看每个类型的详细描述:

循环类型描述
for-in遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。
while 循环运行一系列语句,如果条件为true,会重复运行,直到条件变为false。
repeat…while 循环类似 while 语句区别在于判断循环条件之前,先执行一次循环的代码块。

循环控制语句

循环控制语句改变你代码的执行顺序,通过它你可以实现代码的跳转。Swift 以下几种循环控制语句:

控制语句描述
continue 语句告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
break 语句中断当前循环。
fallthrough 语句如果在一个case执行完后,继续执行下面的case,需要使用fallthrough(贯穿)关键字。

实例:

  • forin循环:
for index in 1...5 {
    print("\(index) 乘于 5 为:\(index * 5)")
}
   
for _ in 0..<10 {
    print("hallo")
}        

// 单侧区间
let names = ["a", "b", "c", "d"]
for name in names[2...] {
	print(name)
}// c d
for name in names[...2] {
	print(name)
}// a b c
for name in names[..<2] {
	print(name)
} // a b
  • while循环
var index = 10

while index < 20 
{
   print( "index 的值为 \(index)")
   index = index + 1
}
  • repeat while
var index = 15

repeat{
    print( "index 的值为 \(index)")
    index = index + 1
}while index < 20

以上程序执行输出结果为:

index 的值为 15
index 的值为 16
index 的值为 17
index 的值为 18
index 的值为 19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值