1. 赋值:
1) 普通的=,以及复合的+=等性质和C语言的一模一样;
2) 不一样的地方要提一下,就是Swift的中的普通赋值和复合赋值都不返回值,比如c = a = b、c = (a = b)、c = a += b、c = (a +=b)都是错误的!
2. 自加/自减:
1) Swift也支持++和--,前后加、前后减都支持;
2) 升级的地方就是也可以作用域浮点数,同样也是加1和减1!
3. 关于溢出处理:
1) Swift对数据溢出的检查非常严格,无孔不入:
var x: Byte = 21 * 100 // 编译错误!
var x: Byte = y * z // 如果y、z乘积超出Byte的返回则运行时错误!
这样的错误Xcode都能精确定位!
2) 如果要执意使用溢出的数据Swift也允许,只不过必须要使用溢出相应的溢出运算符才行,即&[算术运算符],比如:
let x: Byte = 234 &* 23
println(x) // 6
有时溢出会用于某些特定的算法,特别是跟位操作有关的一些算法,因此溢出并不是在任何情况下都是错误的!
4. 求余运算:
1) Swift的求余运算有所升级,也支持浮点数的求余;
2) 回顾求余基本概念:a % b的值就是求解该参数方程,a = (b × 倍数) + 余数,因此a和b都可以是负数,只不过如果b是负数就和b是正数的效果相同,但是如果a是负数那结果要么为0要么为负数;
3) 对于浮点数求余,原理也是求解上述的参数方程,只不过倍数一定是一个整数而已,余数便为浮点数了,比如8.5 % 2.5 = 1.0,就是根据该方程:8.5 = (2.5 × 3) + 1.0得来的;
5. 比较操作符:
1) 和C语言的6中比较符一样,只不过还多了两种:===和!==;
2) ==和!=用来比较变量或者容器的内容,而===和!==就用来比较地址,即是否是同一个变量,一般用在引用类型的数据(Swift中只有类才行),即用来比较两个变量或常量是否引用了同一个对象实例,其它基本数据类型(值类型)的都不能使用这两个比较符号!
3) 在对类对象的引用进行赋值时需要注意了,比如a和b分别为指向不同的两个对象的引用,如果a = b,则a和b将同时指向a所指向的对象,此时a === b的结果就是true了,这点和Java一样!
6. 逻辑运算符符:
1) 和C语言完全一样,!、&&、||;
2) 结合性、短路性等完全一致!
3) 当和自加、自减运算符一起使用时需要注意:
var x = 6, y = 8
println(x > y && x++ == --y) // 这种情况会先计算x > y
println("x = \(x), y = \(y)") // 6和8
7. 位运算符:
1) 也和C语言完全一样,~、|、&、^、<<和>>;
2) 同样,对于负数的右移,高位使用符号位占位,这点要注意了!
3) 位运算符中!的结合性在所有运算符中最强,其余的^之类的和/、*运算符优先级相同,比如16 / 2 ^ 2就是先算/再算^;
8. 区间操作符:
1) 一般用来枚举一个整型数数值区间(虽然区间端点使用浮点数也不会报错,但是运行时会出现一些异常,可能是Swift还并不完备,因此不建议使用浮点数作为区间端点);
2) 一共有两种,一种为闭区间,比如a...b,表示[a, b],另一种是半开半闭区间a..<b,表示[a, b),注意中间点的个数不一样,枚举数组或字典的是否非常有用:
let places = ["北京", "广州", "上海"]
for i in 0..<places.count
{
println("第\(i + 1)个地方是\(places[i])")
}
for i in 1...5 // 闭区间
{
println("index = \(i)")
}
1) 三元操作符:?:,和C语言不同的是?前面的必须是逻辑表达式,即布尔表达式,不能用数值来代替逻辑表达式的结果!
2) ->:用于说明函数的返回值类型;
3) ,:用于集合中元素的分割;
4) ::用于字典中键-值的分割;