Swift语言学习笔记(七)

news/2024/7/20 20:05:32 标签: IOS, Swift


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中包罗了书中的大部分特性,但都是泛泛之谈,细读下来,整本书包含的细节内容非常多,包括大量的例子来帮助理解,相信通读下来收获一定不少。

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


http://www.niftyadmin.cn/n/878533.html

相关文章

上半年私人计划简略及Java桌面游戏开发入门示例并源码集合

近期的计划是先写完手头的一些正经东西&#xff0c;再发几个Java的游戏开发示例&#xff0c;然后就回过头去整理Loonframework项目&#xff0c;总不能挂两年不更新……况且现在挂网上的loonframework-alpha-dao真的是“正宗alpha“&#xff0c;纯草稿&#xff08;-_-&#xff0…

使用Eclipse开发和调试java程序

刚刚学习Java不久&#xff0c;从C#到Java的语言跨度倒是没有多大&#xff0c;但是编译器从VS2013换成Eclipse&#xff0c;最开始还是有些许的不适应。因此做个笔记跟和我一样的初学者分享一下经验。 下面简单介绍一下Eclipse开发环境&#xff0c;并通过一个小例子简单介绍一下E…

纯JAVA版JAVA IDE环境(源码)

刚写了一篇感叹本土化环境的文章&#xff0c;不觉有几许凉意。想起上周整理硬盘时&#xff0c;找到的上学时写的[java ide环境]&#xff0c;开源…… 希望大家都多解决些问题&#xff0c;少空谈些主义、IDEA……———————————————————————————————…

Java图形程序水纹倒映效果

效果图如下&#xff1a;packageorg.test;importjava.awt.Color;importjava.awt.Frame;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.MediaTracker;importjava.awt.Panel;importjava.awt.image.BufferedImage;importjava.awt.image.MemoryImageSource;importja…

java和C#在用法上的区别整理

最近在学习Java&#xff0c;在学习的过程中发现真的是太像了&#xff0c;所以就边学边整理整理学习过程中发现的Java区别于C#的地方&#xff0c;有什么地方漏下的&#xff0c;欢迎留言补充纠正&#xff0c;谢谢。 在入门时最常用的标准输出流&#xff1a; 在C#中使用Console.W…

Java版星球大战游戏(横向射击)

准备逐步整理一下手中的第三方Java游戏代码&#xff0c;将能用的部分融入到LGame里去&#xff0c;没有能用部分的就直接删掉。但无论程式难易如何&#xff0c;也是原作者一番心血&#xff0c;不应将它们弃如敝履&#xff0c;所以我将一一整理后发布到网上保留&#xff08;避免失…

Java版SLG游戏 竜退治2

剣と魔法の世界のターン制シミュレーションゲーム。マップは小規模ながら完成度は高いです。ストーリーは希薄で、ひたすら仲間やアイテムを集めつつ、淡々とステージクリアしていきます。 アイテムの経験値が100↑で固有技が使える6匹目に倒す敵はマテリアルに変化するカードバ…

我终于活着回到博客了~~~

这段时间小弟家上演了一部王姬主演电视剧的真人秀&#xff0c;在那部戏里&#xff0c;王姬扮演的人物叫做宋家慧……以前初看《生活大爆炸》&#xff0c;Leonard母亲初次登场时告诉过他一个“坏消息”&#xff0c;刚看时没明白那为什么算坏消息&#xff0c;现在也终于明白了………