版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.07.24 |
前言
我是swift2.0的时候开始接触的,记得那时候还不是很稳定,公司的项目也都是用oc做的,并不对swift很重视,我自己学了一段时间,到现在swift3.0+已经出来了,自己平时也不写,忘记的也差不多了,正好项目这段时间已经上线了,不是很忙,我就可以每天总结一点了,希望对自己对大家有所帮助。在总结的时候我会对比oc进行说明,有代码的我会给出相关比对代码。
1. swift简单总结(一)—— 数据简单值和类型转换
2. swift简单总结(二)—— 简单值和控制流
3. swift简单总结(三)—— 循环控制和函数
4. swift简单总结(四)—— 函数和类
5. swift简单总结(五)—— 枚举和结构体
6. swift简单总结(六)—— 协议扩展与泛型
7. swift简单总结(七)—— 数据类型
8. swift简单总结(八)—— 别名、布尔值与元组
9. swift简单总结(九)—— 可选值、断言和运算符
赋值运算符
这个就很好理解了,就是给一个常量或者变量赋值,下面我们看一下oc
中赋值运算符的使用。
NSInteger number = 0;
NSString *nickNameStr = @"小明";
下面看一下swift
中赋值运算符的使用情况。
//赋值运算符
let number = 10
var nickName = "小明"
swift
中赋值运算的右边可以是一个元组, 它的元素可以马上被分解成多个常量或者变量。
let (x, y) = (1, 2)
print(x)
print(y)
下面看输出结果
1
2
可见,x
和y
被自动的对应1和2。
注意:与c
和oc
完全不同的是,它们的赋值如果用在if
语句中表示的就是BOOL
属性,而且一定是YES
,但是swift
中赋值操作不会返回任何值,下面的代码是错误的。
//这句是错误的,x = y不会返回任何值
if x = y {
}
这么规定有一个好处就是,防止你把==
误写作=
。
算术运算符
与oc
中一样,swift
支持算术运算符,支持基本的四则算术运算。
+
-
*
/
与c
语言和oc
不同的是:
-
swift
默认情况下不允许在数值运算中出现溢出的情况,你可以使用swift
溢出运算符实现溢出运算如a &+ b
。 -
+
运算符可以用于字符串的拼接,看下边代码。
let greetingStr = "hello " + " world"
print(greetingStr)
下面看输出结果
hello world
- 两个
character
值或一个String
和一个character
值相加生成新的String
类型的值。
求余运算符
oc
和swift
中都有求余运算符,也可以叫取模运算。我们看下面swift
中的几种情况。
- 对负数求余,如果有一个参数为负数,那么负数的符号会被忽略。也就是说
a % b
和a % -b
的结果是一样的。 - 与
oc
中不同的是,swift
中可以对浮点数进行求余,下面看代码。
let number1 = 8.0
let number2 = 2.5
let result = number1.truncatingRemainder(dividingBy: number2)
print(result)
下面看结果
0.5
这里需要注意的是,%
求余在3.0
版本已经不可以直接使用了,必须使用truncatingRemainder
方法,这个方法也只能浮点型的数字调用,我用let number1 = 8
去调用会提示没有这个类型方法,将8
修改成8.0
就可以了。
自增和自减操作
这个就很简单了,但是用的很广,在数组遍历或者计时器等很多方面都会用到,单纯语法并不难,c
和oc
中都有这个的用法,我们就说一下很常见的++a
和a++
的问题吧。
需要注意的是,在swift 3.0
中++a
已经不能用了,换成的是 a += 1
var a = 0
a += 1
let b = a
print(a)
print(b)
下面看输出结果
1
1
大家记住++a
已经被废弃了,就可以了。
一元正号运算符和一元负号运算符
这个都是一元运算符,作用就是改变正负号使用的,没什么说的,略过了。
比较运算符
比较运算符属于复合运算符,是将一个基本运算符集合在一起,表达的一种全新的逻辑运算,比较运算符包含下面几种。
- 等于
a == b
- 不等于
a != b
- 大于
a > b
- 小于
a < b
- 大于等于
a >= b
- 小于等于
a <= b
let a = 1
let b = 1
if a == b {
print("they are same")
}
下面看输出结果
they are same
比较运算符会返回一boolean
值。
三目运算符
oc
和swift
中都有三目运算符,其实它的作用和if
判断是等价的,可以优化if
判断,它的原型其实就是问题 ?答案1 : 答案2
。
我们先看一下oc
中三目运算符的使用。
NSInteger lastPage = 1;
BOOL isLastPage = lastPage == 1 ? @"YES" : @"NO";
NSLog(@"isLastPage = %d",isLastPage);
下面看输出结果
2017-07-24 11:05:53.678670+0800 JJOC[4930:1521314] isLastPage = 1
下面我们就看下swift
中的三目运算符。
let lastPage = 1;
let isLastPage = lastPage == 1 ? "YES" : "NO";
print(isLastPage)
下面看输出结果
YES
空合运算符 Nil Coalescing Operator
空合运算符是swift
中独有的,oc
中并没有这个运算符,一般写作a ?? b
,它的含义就是先对a
进行空判断,如果a
包含一个值就进行解封,否则就返回一个默认值b
,这个运算符有两个条件:
-
a
必须是Optional
类型。 - 默认值
b
的类型必须要和a
存储值得类型保持一致。
其实,空合运算符是对下面代码的简写。
a != nil ? a! : b
上面代码的意思是:当可选类型a
不为空时,进行强制解封a!
访问a
中的值,反之,当a中的值为空时,返回默认值b
,空合运算符提供了一种更改的条件判断和解包行为。
注意:这里a
如果非空,那么值b
将不会被估值,这就是短路求值。
下面看一下代码。
let defaultColor = "black"
var userColor : String?
var colorToUse = userColor ?? defaultColor
print(colorToUse)
userColor = "green"
colorToUse = userColor ?? defaultColor
print(colorToUse)
下面看输出结果
black
green
区间运算符
区间运算符包括两种,一种是闭区间运算符a...b
,表示的是大于等于a小于等于b
,另外一种就是半开区间运算符,a..<b
表示的是大于等于a小于b
。oc
中是没有这个运算符的,oc
中表达这个逻辑只能用>=
和<=
等其他关系运算符结合判断。
下面我们看一下代码。
var sum = 0
for index in 0...3 {
sum += index
}
print(sum)
var sum1 = 0
for index in 0..<3 {
sum1 += index
}
print(sum1)
下面看一下输出结果
6
3
逻辑运算符
这个和oc
中是一样的,包括逻辑与
、逻辑或
和逻辑非
。
- 逻辑非
!a
- 逻辑与
a && b
- 逻辑或
a || b
它们之间的逻辑关系就不多说了,其实很简单,在我们学习c
的时候就已经知道了。我们需要注意的是他们之间的优先级,非的优先级是最高的,其次是另外两个,如果逻辑很复杂的时候,为了读起来清晰,一般要加几个括号。
后记
这篇主要说的就是几种运算符,相对比较简单,很多和oc中是一样的,只有个别的一两个不一样,大家看起来也不会很吃力,希望大家能喜欢~~~