Swift入门

2017-10-30  本文已影响153人  Carden

Swift语言与OC的对比?

积极的一面来说,Swift让我们的代码更清晰,比如Swift的block代码,我们可以更清楚当前发生以及接下来要发生的事情。还可以自定义操作符非常可爱,甚至把一张图片作为变量。我可以看到返回值并且可以从中理解更多。如果说问题的话,Swift的各种工具还十分脆弱,现在还到处都是bug,经常崩溃,偶尔还会生成错误代码。更严重的是,它真的很慢。非常非常慢。不能快速地编译是最大的问题。比如说构建一个UI应用,每次都要花很长时间才能看到效果。

Swift表面上看起来很简单,Swift实际上比Objective-C更难。Objective-C很简单,你只能做这么多事情。但是Swift是一个全新的世界格局,并没有最佳实践。有点像狂野的大西部,你的选择太多了。Swift会给我们更多的选择以好的方式来解决特定的问题。在Objective-C里,大部分方法方式都很清楚,但是Swift允许一些不同的风格。希望这能够让大家学习不同的东西并保持思想的开放。

什么是Swift?

Swift是苹果公司在2014年6月3日在WWDC(全球开发者大会)上新发布的一门支持型开发语言,基于C和Objective-C语言(以下简称OC),但却没有C的一些兼容约束,采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣,界面则基于Cocoa和Cocoa Touch框架,展示了软件开发的新方向。

苹果公司推出Swift的时代背景?

在Swift推出之前,苹果公司一直使用OC作为其御用开发语言。OC源自于史蒂夫・乔布斯创建的NeXT公司,已经使用近20年,它本质上是C语言的面向对象扩展,被限制使用C的方法去跟踪复杂对象。它有很多显著优点,但也有很多明显的缺点,比如:语法复杂,异于大多主流语言,不便掌握;缺少一些语言的保护机制;没有命名空间机制;无为的内存管理机制等。苹果公司意识到问题的存在,所以一直努力改进,比如说:编译器由GCC换成了LLVM,并先后加入literal、block、ARC、Module等特性。但因OC自身特性限制,问题无法彻底根除。要想彻底解决问题,最简单的办法就是重新开发一种语言。假如采用一种简单、易用又安全的新编程语言开发基于苹果平台的应用程序,将会吸引更多的开发者加入,让苹果软件生态圈更加繁荣起来。诸多原因,最终促使了Swift的出现。

Swift语言的优点?

1 博采众长,简化代码,便于初学者开发。Swift既有类似Python的易用性,又摒弃了OC的复杂语法,同时可以兼容OC。其语法内容混合了如OC、JS、Python等优点,但又更接近自然语言。Swift语法简单、易用易学,大大降低了开发者入门的门槛,相对于高难度OC,某种程度而言,Swift更便于开发应用。

2 功能强大,运行效率提高。Swift是一个更快速有效开发苹果平台应用的工具,其原因在于它综合了编译型语言和解释型语言的优缺点,使得其编译速度加快,缩短了从源代码到可执行应用的转变时间;同时执行速度也得到提升,从而保证了所开发的应用程序在手机或平板电脑上高速运行。

3 交互式编程,方便开发者开发和调试。Swift提供的Playground实时预览代码效果真正实现了“所见即所得”。程序员可在编程的同时,预览运行效果,这样既方便初学者学习,又方便熟练者检查bug,提高调试效率。

编程语言发展历史?

最开始的电脑编程都是人工输入 “0” 和 “1” 的机器语言,完全以电脑为中心。后来大家觉得每天输 “0”“1” 效率实在太低了,便有人发明了汇编语言,用一些符合和字母来代替特定的 “0” 和 “1” 的组合。再后来,汇编语言也显得写起来太慢,如果想用汇编语言写一个较大的程序需要海量的代码。于是有人发明了 C 语言这门 “高级语言”,让开发者本身能够更高效快速的编写代码,同时不太牺牲计算机读取代码的效率。然后 C 语言迅速成为了代码界的主流语言。尽管 C 语言比起最初的机器语言已经好懂很多,而且需要写的代码量更少了,但依然有人想,编程语言能不能更简单,更像人话?这就出现了脚本语言,比如大家熟知的 Python,Perl,以及我们的网站所用的 PHP。然而脚本语言并没有像 C 语言一样基本替代了汇编语言,这是为什么呢?最简单的原因便是,脚本语言运行效率较低。电脑并不理解脚本语言,因此,用脚本语言写的程序会被转化为机器语言,从而让计算机执行。然而问题是,这就好像我说中文,你说英语,我们之间隔了一个翻译,翻译给机器后总是会产生词不达意的情况,因此许多本来很简单的运行会被拖的冗长,从而降低了运行效率。而 C 语言等面向机器的语言则更像是一个懂英语的人用中文说话给翻译,他了解英语思考者的思路和逻辑,并且明确的用中文中类似的表达说出来,所以 C 语言的运行效率更高。看好Swift的原因便是它既解决了脚本语言运行效率的问题,又继承了其简洁的语法和强大的功能。Swift 语言的发明者 Chris Lattner 之前最大的成就便是开发了编译系统 LLVM,能将高级语言转换为机器语言,也就是前文所说的 “翻译”。Lattner 也因为 LLVM 其极大的提高了包括 Objective C 在内的诸多高级语言的执行效率而获得了美国计算机协会颁发的 “软件系统奖”。这次 Lattner 开发 Swift 相当于从高级语言到编译器做了个全套,并且他表示 Swift 在许多方面的运行效率都优于 Objective C,而且远超的 Python。也就是说,如果 Swift 的运行效率真的像 Lattner 描述的那样,那么 Swift 代表的程序猿先进生产力的发展要求(提高编程效率),代表了计算机先进文化的发展方向(语法简洁,现代),代表了广大人民的根本利益(写起来爽,学起来快)。当然,前提是 Swift 真的像 Lattner 所说的那样强大。现在 Java 都更新到 8.0,但现在大部分人用的都还是 Java 1.6,为什么大家不用有更多新特性的 Java 8.0 呢?说白了就是大家觉得 1.6 已经能做许多事情,懒得去看新功能了。而 Java 本身也一样,一度我都觉得它要死了,结果 Andorid 又把它救活了。但现在 Java 修修补补到 8.0 依然还是有许多问题是没法解决的,因为本身就是架构上的过时,那为何大家还在用它?因为那些大公司都用习惯 Java 了,没有勇气去换一个更现代更高效的语言,而 Swift 则是逼着公司和开发者去适应新的语言和功能。Swift 的情形和 Go(Google 发布的编程语言)不一样。大家都知道 Go 很好,但 Google 从来没说要大家用 Go 来写 Andorid 的应用。这就不像苹果,推出 Swift 后,对 Objective C 的支持肯定会逐渐减弱,最后完全转到 Swift,这就逼大家必须抛弃二十多年前发明的 Objective C 而必须用 Swift。退一步,如果用 Swift 的效率比 Objective C 高,你如果不用 Swift 在应用市场上的反应就会比别人慢,那还是逼你用 Swift。特别是这样一来,Google 最后还是只能要求大家用 Go 而不是 Java 来写 Andorid 的应用,这样对整个 IT 圈都是一件进步的事。

简单值?

1、不用申明变量类型,如果赋值,编译器自动推断变量类型,不赋值则直接在变量名后面拼接类型let 常量 var 变量

2、创建数组并访问

vararray = [“”,””,””,””]

array[1] = “”

3、创建字典并访问

var dict = [“”:””,””:””,]

dict[“”] = “"

控制流?

1、遍历数组

for元素in array{

}

2、遍历字典

for (key,array) in dict{

for元素in array{

}

}

3、循环

while变量< 100{

}

4、有限次循环

for var i = 0;i < 4;++i{

}

函数和闭包?

1、func声明函数,名字和参数识别函数,——>指定返回值类型

func函数名(形参1:String,行参2:String) -->String{

return "获得内容1: (形参1),获得内容2:(形参2)"

}

2、函数调用

函数名("实参1","实参2")

3、函数嵌套和闭包

对象和类?

1、使用class和类名创建一个类

2、类里面声明属性,var变量=初始值;

3、类里面声明方法,依然func+函数名

4、创建一个类的实例对象

var对象=类名()

5、访问类的属性,对象.变量=赋值

6、访问类的方法,var自定义方法名=对象.方法

7、类里面init方法的实现,init(name:String){ self.name = name}

8、类的继承,子类重写父类方法,必须func前面添加override

9、类的属性的setter和getter

枚举?

1、创建枚举

2、使用枚举

结构体?

1、创建结构体

2、结构体传值

3、结构体里面的方法用mutating关键字,表示可修改

协议?

1、protocol声明协议

protocol ExampleProtocol{

var simpleDescription: String { get }

mutating func adjust()

}

2、满足协议的类

class SimpleClass: ExampleProtocol {

}

扩展?

1、为现有官方类型添加方法和属性,同样,方法前用mutating修饰

2、类别满足协议

extension Int: ExampleProtocol {

}

泛型?

1、创建泛型函数、方法、类、枚举和结构体,名称后面加一个尖括号<>

上一篇下一篇

猜你喜欢

热点阅读