swift简单总结(十)—— 运算符

版本记录

版本号 时间
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

可见,xy被自动的对应1和2。

注意:与coc完全不同的是,它们的赋值如果用在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类型的值。

求余运算符

ocswift中都有求余运算符,也可以叫取模运算。我们看下面swift中的几种情况。

  • 对负数求余,如果有一个参数为负数,那么负数的符号会被忽略。也就是说a % ba % -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就可以了。


自增和自减操作

这个就很简单了,但是用的很广,在数组遍历或者计时器等很多方面都会用到,单纯语法并不难,coc中都有这个的用法,我们就说一下很常见的++aa++的问题吧。

需要注意的是,在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值。


三目运算符

ocswift中都有三目运算符,其实它的作用和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小于boc中是没有这个运算符的,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中是一样的,只有个别的一两个不一样,大家看起来也不会很吃力,希望大家能喜欢~~~

滕王阁序
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容