Swift--运算符

2019-07-23  本文已影响0人  优雅的步伐

算数运算符

算数运算符有 一元运算符、 二元运算符、 算数赋值运算符

一元运算符
运算符 名称 说明 例子
- 取反符号 取反运算 b=-a
++ 自加一 先取值再加一,或先加一再取值 a++或++a
-- 自减一 先取值再减一,或先减一再取值 a--或--a
注意:++-- 在Swift3.0已经弃用。
var d = 1
d++ //报错,可以改写成 d += 1 或者 d = d + 1
二元运算符
运算符 名称 说明 例子
+ 求a加b的和,还可以用于string类型,进行字符串连接操作 a+b
- 求a减b的差 a-b
* 求a乘以b的积 a*b
/ 求a除以b的商 a/b
% 取余 求a除以b的余数 a%b
算数赋值运算符
运算符 名称 例子
+= 加赋值 a+=b、a+=b+3
-= 减赋值 a-=b
*= 乘赋值 a*=b
/= 除赋值 a/=b
%= 取余赋值 a%b

关系运算符

运算符 名称 说明 例子 可应用的类型
== 等于 a等于b时返回true,否则返回false。==与=的含义不同 a==b 整型、浮点型、字符、字符串、布尔型等值类型比较
!= 不等于 与==恰恰相反 a!=b 整型、浮点型、字符、字符串、布尔型等值类型比较
> 大于 a大于b时返回true,否则返回false a>b 整型、浮点型、字符、字符串
< 小于 a小于b时返回true, 否则返回false a<b 整型、浮点型、字符、字符串
>= 大于等于 a大于等于b时返回true, 否则返回false a>=b 整型、浮点型、字符、字符串
<= 小于等于 a小于等于b时返回true, 否则返回false a<=b 整型、浮点型、字符、字符串
=== 恒等于 a与b同引用同一个实例时返回true, 否则返回false。===与==的含义不同。===是比较两个引用的内容是否为同一个实例 a===b 主要用于引用类型数据比较
!== 不恒等于 与===恰恰相反 a!==b 主要用于引用类型数据比较

**注:** 数据类型分为`值类型`和`引用数据类型`
值类型: 整数,浮点数,字符,字符串等数据类型
引用数据类型:类所声明的数据类型
如何选择正确的类型?

如果你想创建一个新类型,那么你应该选择值类型还是引用类型呢?当你使用Cocoa框架时,很多API都是NSObject的子类,那么你就必须要使用引用类型,也就是class。在其他情况下,这里有一些指导建议你可以参考:

使用值类型的情形

使用引用类型(比如class)的情形

看看下面的代码
class Person {
    var name : String
    var age : Int
    init (name : String, age : Int) {
        self.name = name
        self.age = age
    }
}
let p1 = Person(name: "Tony", age: 18)
let p2 = Person(name: "Tom", age: 20)
if p1 === p2 {
    print("p1 === p2")
}
let name1: NSString = "world"
let name2: NSString = "world"

if name2 === name1 {
    print("name2 === name1")
}

p1和p2 是Person类的两个对象,属于引用数据类型
如果写成下面的样子会报错

image.png

name1和name2也属于引用数据类型,但是写成下面的样子不会报错


image.png

实际上是因为:name2与name1已经由NSString类型转变为了String类型

解释:NSString类型与String类型有时候会发生无开销桥接过程,所谓无开销桥接过程就是我们可以把字符串String类型和NSString类型进行互相赋值,在进行赋值的过程中数据类型会发生转变,即类型由值类型(String类型)转变为引用数据类型(NSString类型)。

无开销不会产生额外的内存负担,而且过程是不知不觉的。

“苹果公司提供一种“零开销桥接技术” 使NSString和String互相转化更加低成本、更加简单 ”。

逻辑运算符

逻辑运算符
运算符 名称 例子 说明 可应用类型
逻辑反 !a a为true时,值为false, a为false时,值为true 布尔型
&& 逻辑与 a&&b ab全为true,计算结果为true, 否则为false 布尔型
11 逻辑或 a11b ab全为false时,计算结果为false, 否则为true 布尔型

位运算符

位运算符

位运算是以二进位(bit)为单位进行运算的,操作数和结果都是整型数据。位运算符有如下几个运算符:&、|、^、~、>>、<<。

运算符 名称 例子 说明
~ 位反 ~x 将x的值按位取反
& 位与 x&y x与y进行位与运算
1 位或 x1y x与y位进行位或运算
^ 位异或 x^y x与y位进行位异或运算
>> 右移 x>>a x右移a位,无符号整数高位采用0补位,有符号整数高位采用符号位补位
<< 左移 x<<a x左移a位,低位位补0

位异或:只要两个数相反结果就是1,否则为0

image.png

示例

let a: UInt8 = 0b10110010
let b: UInt8 = 0b01011110
print("a | b = \(a | b)") //11111110
print("a & b = \(a & b)") //00010010
print("a ^ b = \(a ^ b)") //11101100
print("~a = \(~a)")       //01001101

print("a >> 2 = \(a >> 2)") //00101100
print("a << 2 = \(a << 2)") //11001000

let c: Int8 = -0b1100

//补全c:    -00001100
print("c >> 2 = \(c >> 2)") //-00000011
print("c << 2 = \(c << 2)") //-00110000

其他运算符

示例

let score: UInt8 = 80
let result = score > 60 ? "及格" : "不及格"  //三元运算符( ?: )
print(result)

var arr = [12, 56, 78, 89]  //使用逗号运算符( , )
print(arr[2])    //下标运算符  ( [] )

var people = (name: "张三", age:20) // 使用冒号运算符( : )
上一篇 下一篇

猜你喜欢

热点阅读