Swift支持大部分标准C语言的运算符,并且对许多特性进行改进来减少常规编码的错误。除了支持基本运算符外,Swift还提供了2个特殊的运算符,分别是: 溢出运算符 和 区间运算符 首先
Swift支持大部分标准C语言的运算符,并且对许多特性进行改进来减少常规编码的错误。除了支持基本运算符外,Swift还提供了2个特殊的运算符,分别是:溢出运算符和区间运算符
首先看下基本运算符
import UIKit var str = "Hello, playground" /** 赋值运算符 1. 注意??:与C语言和OC不同,Swift的赋值操作并不返回任何值。 这个特性是你无法把(==)错写成 (=) */ let b = 10 var a = b //if a = b { // // c这样写错误,因为 a = b 并不返回任何值 //} /** 算术运算符 1.Swift中所有数值类型都支持基本的四则算术运算符 2.注意??:swift默认情况下不允许在数值计算中出现溢出情况。可以使用溢出运算符实现溢出计算 3.加法运算符 也可用于 String的拼接 */ print(1 + 2) print(10 - 3) print(3 * 7) print(27.0 / 3.0) print("hello, " + "world") // "hello, world" /** 求余运算符 1. a % b 求余运算符 % 在有的语言中也叫 取模运算符 2. 在对负数b求余时,b的符号会被忽略。这意味着 a % b 和 a % -b的结果相同 */ print(9 % 4)// 等于1 print(-9 % 4)// 等于-1 print(9 % -4)// 等于1 /** 一元负号运算符 */ let four = 4 let tempFour = -four /** 一元正号运算符 该运算符 不做任何改变地返回操作数的值 */ let mSix = -6 let alsoMsix = +mSix// 等于 -6 /** 组合运算符 将其它运算符和赋值运算符(=)组合的f组合运算符 注意??:复合赋值运算符没有返回值 let m = n += 4 这类代码是错误 */ var n = 2 n += 3 print(n) //let m = n += 5 //print(m)// 结果是 () /** 比较运算符 1. 所有标准C语言中的比较运算符都可以在Swift中使用 2. 每个比较运算符返回了一个标识表达式是否成立的布尔值 3. swift提供了恒等(===)和不恒等(!==)这两个比较符来判断两个对象是否 引用同一个对象实例 4. 元组比较:如果两个元组的元素相同,且长度相同的话,元组就可以被比较 比较元组大小会按照从左到右、逐值比较的方式,知道发现两个值不等时停止 如果所有的值都相等,那么这一对元组就相等 注意??:swift标准库只能b比较7个以内元素的元组比较 */ print(2 != 1)// true print((1, "dog") < (3, "banner"))// true 因为1小于3,所以整个元组就是小于的,不管元组剩下的值如何 print((4, "dog") < (4, "banner"))// false 当异地个元素相同的时候,第二个元素就会用做比较 /** 三目运算符 */ let contentHeight = 40 let hasHeader = true let rowHeight = contentHeight + (hasHeader ? 50 : 30) /** 空合运算符 a ?? b 将对可选类型a进行空判断,如果a包含一个值就进行解封,否则返回一个默认值b 注意??:表达式a必须是可选类型。默认值b的类型必须和a类型一致 */ let defaultColorName = "red" var userDefinedColorName: String?// 默认值为nil var colorNameToUse = userDefinedColorName ?? defaultColorName print(colorNameToUse) userDefinedColorName = "blue" colorNameToUse = userDefinedColorName ?? defaultColorName print(colorNameToUse) /** 逻辑运算符 逻辑运算符的操作对象是逻辑布尔值。 逻辑非 (!a) 逻辑与(a && b) 逻辑或(a || b) */ let allowedEntry = false if !allowedEntry { print("ACCESS DENIED") } let enteredDoorCode = true let passedRetinaScan = false if enteredDoorCode && passedRetinaScan { print("Welcome!") } else { print("ACCESS DENIED") } let hasDoorKey = false let knowsOverridePassword = true if hasDoorKey || knowsOverridePassword { print("Welcome!") } else { print("ACCESS DENIED") }View Code
区间运算符
/** 1. 闭区间运算符 (a...b)定义一个包含从a到b的所有值的区间,a值不能超过b */ for index in 1...6 { print(index)// 1 2 3 4 5 6 } /** 2. 半开区间运算符 (a..<b)定义一个包含从a到b但不包括b的区间 */ let names = ["Anna", "Alex", "Brian", "Jack"] let count = names.count for i in 0..<count { print("第 \(i + 1) 个人叫 \(names[i])") } /** 3. 单侧区间 可以表达往一侧无限延伸的区间 */ for name in names[2...] { print(name)// Brian Jack }
溢出运算符
//溢出运算符 var am = UInt8.max //am = 255 //Error: -> var b:UInt8 = am + 1 //注意b会出现溢出,此句报错 //下面使用溢出运算符,结果为:0 var bm:UInt8 = UInt8(a &+ 1) //类似的还有&-、&*、&/,使用溢出运算符可以在最大值和最小值之前循环而不会报错,下面c的值为255 var c:UInt8 = UInt8(bm &- 1)