Swift语言学习笔记(七)

原创 2017年01月03日 19:52:12


118.         比特取反运算符“~”将数字的每一个比特位都做取反运算(0变1,1变0),例如:

var m : UInt8 =252        //0b11111100

var n = ~m

println(n)                        //输出3,3=0b00000011

119.         正常情况下,当一个存储数值的变量或常量被赋予一个超出其上限或者下限的数值时,会在运行时抛异常,例如:

var m : Int8 =Int8.max       //m = 127

m +=1                                    //异常

Swift为我们一些越界运算符,越界运算符在基础运算符的左侧加上了一个“&”符号:

&+   &-  &*   &/   &%

注意,传统的加减乘除和取余运算可以使用下面的方式简写:

+=   -=   *=  /=   %=

这种简写不能用于越界运算符。

越界运算符在处理运算的时候,当处理的数字超出了上限或者下限时,会反转到另一端继续计算,例如上面的例子我们做一下修改:

var m : Int8 = Int8.max

m = m &+1                                //m = -128

m = 100

m = m &*3                           //m = 44

120.         正常情况下,由于0不能做除数,因此使用“/”和“%”运算符右侧为0时,会抛异常,但是使用“&/”和“&%”运算时,不会抛异常,返回结果为0:

let x = 10 /0           //   异常

let x = 10 %0         //异常

let x = 10 &/ 0      //x = 0

let x = 10 %/ 0      //x = 0

121.         Swift中使用@infix来重载二元运算符,重载运算符的方法被定义为全局的,例如:

class DemoClass {

    var n : Int = 0

    var s : String = ""

}

@infix  func + (a : DemoClass, b : DemoClass)->DemoClass {

    var temp = DemoClass()

    temp.n = a.n + b.n

    temp.s = a.s + b.s

    return temp

}

Swift使用@prefix和@postfix关键字来定义前置和后置运算符重载,例如“-”和“++”等等。

Swift中使用@assignment关键字来重载组合计算运算符,例如“+=”,“-=”这些运算符:

@assignment func += (inout left : DemoClass, right:  DemoClass) {

left = left +right                //这里重用我们之前重载的“+”运算

}

对于“==”和“!==”运算符,也是用@infix来重载。

122.         在Swift中可以自定义运算符,自定义运算符只能使用下面的运算符来组合:

/  =  -  +  *  % <  >  !  &  |  ^  .  ~

自定义运算符使用operator关键字来定义,需要定义为全局的,operator后面可以是要你管prefix,infix和postfix来修饰:

operator prefix +++ {}

定义好之后就可以对其进行定义了。

我们还可以为自定义的运算符指定其结合性和优先级,结合性的可选值为:left(左结合,当优先级相同的时候,从左向右计算),right(右结合),none,当结合性被设置为none的时候,不允许和优先级相同的运算符组合使用。结合性的关键字为associativity,优先级的关键字为precedence,例如:

operator prefix +++ { associativity leftprecedence 140 }

如果像之前那样不指定结合性和优先级,则默认结合性为left,优先级为100。

如果运算符重载的时候没有歧义,可以省略@prefix,@infix或者@postfix这些关键字。

笔记中的主要部分的内容都是阅读《The Swfit Programming Language》一书整理总结的知识点,学习了Swift之后,最大的一个感觉就是Swift语言真的非常灵活和简洁,可以看到Swift中引入了CC++JavaC#python等语言的很多特性,并且针对其中的一些不方便的地方做了大量的调整,而且Swift针对这些语言中一些容易诱导程序员犯错的语法和特性进行了修改,极大地保证了在编译阶段消除掉那些“坑爹”的bug,而不是在运行的时候遇到那种奇奇怪怪的bug后兜很大一个圈子调试,最后发现自己少写或者写错了一个符号而已。除此之外,可以看到Swift在设计的时候,依然保留了很多Object-C的语法习惯和一些特性,从而保证了苹果开发者从Object-CSwift的过渡更加平滑。

相比于Object-CSwift写代码真的要方便很多了,在语法上,Swift帮助开发者做了很多的简化工作和优化工作,使开发者在使用更简洁的代码开发的同时,不必过多的担心生成代码的效率问题(当然这里不是说那种烂算法导致效率低的问题)。而且Swift和其他高级语言在语法上没有太多的差异,使得熟悉其他高级语言的程序员能够很快的掌握这门语言。

总的来说,从个人角度讲,Swift确实要比Object-C好很多,建议有兴趣的朋友也好好读一读The Swfit Programming Language》这本书,尽管第一章“Atour to Swift”中包罗了书中的大部分特性,但都是泛泛之谈,细读下来,整本书包含的细节内容非常多,包括大量的例子来帮助理解,相信通读下来收获一定不少。

有愿意交流的朋友欢迎加博友一起学习~~

版权声明:本文为博主原创文章,未经博主允许不得转载。

最优化学习笔记(十七)——拟牛顿法(3)

秩1修正公式    在秩1修正公式中,修正项为αkz(k)z(k)T,αk∈R,z(k)∈Rn\alpha_k\boldsymbol{z}^{(k)}\boldsymbol{z}^{(k)T}, \a...
  • chunyun0716
  • chunyun0716
  • 2017年01月08日 14:43
  • 462

qt学习笔记(七)之数据库简介

笔者最近用Qt写公司的考勤机。本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手。 废话不...
  • liuligui5200
  • liuligui5200
  • 2015年07月09日 15:59
  • 364

【Swift】学习笔记(七)——闭包

1、什么是闭包 闭包简单的来说就是匿名函数、lambdas函数 ,书面点的来说就是闭包是自包含的函数代码块,可以在代码中被传递和使用,可以捕获和存储其所在上下文中任意常量和变量的引用。 这就是...
  • u012386696
  • u012386696
  • 2015年08月01日 14:10
  • 424

swift学习笔记(七)自动引用计数

与Object-c一样,swift使用自动引用计数来跟踪并管理应用使用的内存。当实例不再被使用时,及retainCount=0时,会自动释放是理所占用的内存空间。 注:引用计数仅适用于类的实例,因为...
  • jidiao
  • jidiao
  • 2014年06月21日 11:42
  • 1470

swift学习笔记(七)(定位)

代码如下: import UIKit import CoreLocation class ViewController: UIViewControlle...
  • iOS_Pop
  • iOS_Pop
  • 2016年02月18日 15:27
  • 486

初探swift语言的学习笔记七(swift 的关健词)

swift 关键词
  • fengsh998
  • fengsh998
  • 2014年06月18日 18:41
  • 12917

swift语言的学习笔记七(swift 的关健词)

每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词:     关键词: 用来声明的: “ class, deinit, enum, exten...
  • xdrt81y
  • xdrt81y
  • 2015年03月23日 14:48
  • 1318

JSP学习笔记七之Cookie

首先提一下http协议的无状态性,指的是服务器不会记住已经给它发过请求的客户端。每次收到请求都会认为是一个新的客户端发过来的。(即:服务器不会记住给他发过请求的客户端)。 所以这个时候我们就需要使用...
  • LULEI1217
  • LULEI1217
  • 2016年03月22日 13:44
  • 2039

读《七周七语言》,感悟其魂

读《七周七语言》,感悟其魂 Author:zfive5(zhaozidong) Email:zfive5@163.com 前些日子看《七周七语言:理解多种编程范型》,突然有些冲动...
  • zfive5
  • zfive5
  • 2012年08月26日 12:36
  • 3768

Swift成为主流语言的10个理由

是时候使用易入手又全面的Swif语言为iOS和mac OS X做应用开发了。 虽然编程语言不会那么容易消逝,但坚持衰落范例的开发小组正在这么做。如果你正为移动设备开发应用程序,并且你还没有研究Swi...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2016年05月24日 22:42
  • 3522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift语言学习笔记(七)
举报原因:
原因补充:

(最多只允许输入30个字)