美文网首页
Swift--运算符

Swift--运算符

作者: 优雅的步伐 | 来源:发表于2019-07-23 19:21 被阅读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)的情形

  • 当使用===运算符判断两个对象是否引用同一个对象实例的时候。
  • 当上下文需要创建一个共享的、可变的对象时。
    在Swift中,Array、String、Dictionary都是值类型。它们的使用方式类似C语言中得int,每一个实例都有一份数据。你不需要进行显示的复制操作去防止数据在你不知情的情况下被修改。更重要的是,你可以跨线程进行传参而不需要考虑同步的问题,因为传递值类型很安全。秉着高安全性的精神,这种类型划分模式能帮助你在Swift中写出更加有可预测性的代码。

看看下面的代码
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

其他运算符

  • 三元运算符 (?:) 例如:x?y:z; 其中x、y和z都为表达式。
  • 括号 起到改变表达式运算符顺序的作用,它的优先级最高。
  • 引用号(.) 实例调用属性、方法等操作符。
  • 赋值号 (=) 赋值是用等号运算符(=)进行的。
  • 问号(?) 用来声明可选类型。
  • 感叹号 (!) 对可选类型值进行显示拆包。
  • is 判断某个实例是否为某种类型。
  • as 强制类型转换。
  • 箭头 (->) 说明函数或方法返回值类型。
  • 逗号运算符(,) 用于集合分割元素。
  • 冒号运算符 (:) 用于字典集合分割“键值”对。

示例

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

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

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

相关文章

  • Swift--运算符

    算数运算符 关系运算符 逻辑运算符 位运算符 其他运算符 算数运算符 算数运算符有 一元运算符、 二元运算符、 算...

  • The Awesome Raywenderlich.com: 经

    Swift--弹性动画--Swift Swift--CALayer 教程: Getting Started超棒的源...

  • Swift4.0--一个好用的金融类游标卡尺

    Swift--一个好用的金融类游标卡尺 思路:使用UICollectionView制作一个游标卡尺,每一个cell...

  • swift--字典

    字典的介绍 1.字典允许按照某个键访问元素 2.字典是由两部分组成,一个键(key)集合,一个是值(value)集...

  • swift--类

    类的属性 1.存储属性:存储常量和变量 2.计算属性:通过某种方式计算出来的属性 3.类的属性:与整个类目相关联的...

  • swift--元组

  • swift--字典

    创建字典 字典的基本操作 遍历字典 字典合并

  • swift--函数

    1.函数基本写法: swift里面的函数就相当于是oc里面的方法,以func开头 事例: func 函数名 (参数...

  • swift--元组

    一: 元组类型介绍 元组类型由 多个 任意类型的数据组成,并不要求是相同类型,组成元组类型的数据可以称为“元素”....

  • Swift--扩展

    扩展的概念 扩展计算属性 扩展方法 扩展构造函数 扩展下标 扩展的概念 在Swift中可以使用一种扩展机制,在原有...

网友评论

      本文标题:Swift--运算符

      本文链接:https://www.haomeiwen.com/subject/rgialctx.html