注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风的驿站

一徐清风,半指烛光,觥筹已净,只余茶香。残卷一章,妙趣非常,忽闻帘响,愿闻其详?

 
 
 

日志

 
 
关于我

喜欢写生 编程 音乐 设计 喜欢把自己的想法变成实实在在的东西 喜欢安静的做一些事情 CSDN博客:http://blog.csdn.net/qwertyupoiuytr

网易考拉推荐

【原创】Swift语言学习笔记(七)  

2014-07-18 11:31:10|  分类: Swift |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

var m : UInt8 = 252        //0b11111100

var n = ~m

println(n)                         //输出33=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后面可以是要你管prefixinfixpostfix来修饰:

operator prefix +++ {}

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

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

operator prefix +++ { associativity left precedence 140 }

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

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


笔记中的主要部分的内容都是阅读《The Swfit Programming Language》一书整理总结的知识点,学习了Swift之后,最大的一个感觉就是Swift语言真的非常灵活和简洁,可以看到Swift中引入了C,C++,Java,C#,python等语言的很多特性,并且针对其中的一些不方便的地方做了大量的调整,而且Swift针对这些语言中一些容易诱导程序员犯错的语法和特性进行了修改,极大地保证了在编译阶段消除掉那些“坑爹”的bug,而不是在运行的时候遇到那种奇奇怪怪的bug后兜很大一个圈子调试,最后发现自己少写或者写错了一个符号而已。除此之外,可以看到Swift在设计的时候,依然保留了很多Object-C的语法习惯和一些特性,从而保证了苹果开发者从Object-C到Swift的过渡更加平滑。
相比于Object-C,Swift写代码真的要方便很多了,在语法上,Swift帮助开发者做了很多的简化工作和优化工作,使开发者在使用更简洁的代码开发的同时,不必过多的担心生成代码的效率问题(当然这里不是说那种烂算法导致效率低的问题)。而且Swift和其他高级语言在语法上没有太多的差异,使得熟悉其他高级语言的程序员能够很快的掌握这门语言。
总的来说,从个人角度讲,Swift确实要比Object-C好很多,建议有兴趣的朋友也好好读一读《The Swfit Programming Language》这本书,尽管第一章“A tour to Swift”中包罗了书中的大部分特性,但都是泛泛之谈,细读下来,整本书包含的细节内容非常多,包括大量的例子来帮助理解,相信通读下来收获一定不少。
有愿意交流的朋友欢迎加博友一起学习~~
  评论这张
 
阅读(139)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017