Swift语言官方教程中文翻译

更新时间:2023-04-15 04:55:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1欢迎使用Swift

在本章中您将了解Swift 的特性和开发历史,并对Swift 有一个初步的了解

1.1关于Swift

Swift 是一种新的编程语言,用于编写iOS 和OS X 应用。Swift 结合了C 和

Objective-C 的优点并且不受C的兼容性的限制。Swift 使用安全的编程模式并添加了很多新特性,这将使编程更简单,扩展性更强,也更有趣。除此之外,Swift 还支持人见人爱的Cocoa 和Cocoa Touch 框架。拥有了这些特性,Swift将重新定义软件开发。

Swift 的开发从很久之前就开始了。为了给Swift 打好基础,苹果公司改进了编译器,调试器和框架结构。我们使用自动引用计数(Automatic Reference Counting, ARC)来简化内存管理。我们在Foundation 和Cocoa的基础上构建框架栈并将其标准化。Objective-C 本身支持块、集合语法和模块,所以框架可以轻松支持现代编程语言技术。得益于这些基础工作,我们现在可以发布一个新语言,用于未来的苹果软件的开发。

Objective-C 开发者对于Swift 并不会感到陌生。它采用了Objective-C 的命名参数以及动态对象模型,可以无缝对接到现有的Cocoa 框架,并且可以兼容Objective-C 代码。

在此基础之上,Swift 还有许多新特性并且支持过程式编程和面向对象编程。

Swift 对于初学者来说也很友好。它是第一个既满足工业标准又像脚本语言一样充满表现力和趣味的编程语言。它支持代码预览,这个革命性的特性可以允许程序员在不编译和运行应用程序的前提下运行Swift 代码并实时查看结果。

Swift 将现代编程语言的精华和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化,编程语言对开发进行了优化,两者互不干扰,鱼与熊掌兼得。Swift 即可以用于开发―hello, world‖这样的小程序,也可以用于开发一个完整的操作系统。所有的这些特性让Swift 对于开发者和苹果来说都是一项值得的投资。

用Swift 编写iOS 和OS X 应用将是一场美妙的体验,Swift 之后也会不断开发新特性和兼容性。我们对Swift 充满信心,你还在等什么!

1.2 Swift 初见

本页内容包括:

?简单值

?控制流

?函数和闭包

?对象和类

?枚举和结构体

?接口和扩展

?泛型

通常来说,编程语言教程中的第一个程序应该在屏幕上打印―Hello, world‖。在Swift 中,可以用一行代码实现:

如果你写过 C 或者Objective-C 代码,那你应该很熟悉这种形式——在Swift 中,这行代码就是一个完整的程序。你不需要为了输入输出或者字符串处理导入一个单独的库。全

局作用域中的代码会被自动当做程序的入口点,所以你也不需要

要在每个语句结尾写上分号。

这个教程会通过一系列编程例子来让你对Swift 有初步了解,如果你有什么不理解的地方也不用担心——任何本章介绍的内容都会在后面的章节中详细讲解。

注意:为了获得最好的体验,在Xcode 当中使用代码预览功能。代码预览功能可以让你编辑代码并实时看到运行结果。

简单值

使用

是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,

常量或者变量的类型必须和你赋给它们的值一样。然而,声明时类型是可选的,声明的同

时赋值的话,编译器会自动推断类型。在上面的例子中,编译器推断出

个整数(integer)因为它的初始值是整数。

如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。

值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。

有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。例如:

要创建一个空数组或者字典,使用初始化语法。

控制流

使用

将报错,而不会隐形地与0 做对比。

你可以一起使用

可能是一个具体的值或者是

函数和闭包

使用一个元组来返回多个值。

函数的参数数量是可变的,用一个数组来获取它们:

函数可以嵌套。被嵌套的函数可以访问外侧函数的变量,你可以使用嵌套函数来重构一个太长或者太复杂的函数。

函数是一等公民,这意味着函数可以作为另一个函数的返回值。

函数也可以当做参数传入另一个函数。

练习:重写闭包,对所有奇数返回0.

有很多种创建闭包的方法。如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回。

你可以通过参数位置而不是参数名字来引用参数——这个方法在非常短的闭包中非常有用。当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面。

对象和类

使用类中属性的声明和常量、变量声明一样,唯一的区别就

要创建一个类的实例,在类名后面加上括号。使用点语法来访问实例的属性和方法。

子类的定义方法是在它们的类名后面加上父类的名字,用冒号分割。创建类的时候并不需要一个标准的根类,所以你可以忽略父类。

子类如果要重写父类的方法的话,需要用——如果没有添加

重写父类方法的话编译器会报错。编译器同样会检测

属性可以有getter 和setter 。

个名字。

注意

1.设置子类声明的属性值

2.调用父类的构造器

3.改变父类定义的属性值。其他的工作比如调用方法、getters和setters也可以在这个阶段

完成。

如果你不需要计算属性但是需要在设置一个新值之前运行一些代码,使用

比如,下面的类确保三角形的边长总是和正方形的边长相同。

类中的方法和一般的函数有一个重要的区别,函数的参数名只在函数内部使用,但是方法的参数名需要在调用的时候显式说明(除了第一个参数)。默认情况下,方法的参数名和它在方法内部的名字一样,不过你也可以定义第二个名字,这个名字被用在方法内部。

枚举和结构体

在上面的例子中,枚举原始值的类型是

始值会按照顺序赋值。你也可以使用字符串或者浮点数作为枚举的原始值。

枚举的成员值是实际值,并不是原始值的另一种表达方法。实际上,如果原始值没有意义,你不需要设置。

注意,有两种方式可以引用给枚举成员

因为

使用缩写。

使用

们之间最大的一个区别就是结构体是传值,类是传引用。

来。

一个枚举成员的实例可以有实例值。相同枚举成员的实例可以有不同的值。创建实例的时候传入值即可。实例值和原始值是不同的:枚举成员的原始值对于所有实例都是相同的,而且你是在定义枚举的时候设置原始值。

例如,考虑从服务器获取日出和日落的时间。服务器会返回正常结果或者错误信息。

注意如何从

接口和扩展

类、枚举和结构体都可以实现接口。

练习:写一个实现这个接口的枚举。

你可以像使用其他命名类型一样使用接口名——例如,创建一个有不同类型但是都实现一个接口的对象集合。当你处理类型是接口的值时,接口外定义的方法不可用。

泛型

在尖括号里写一个名字来创建一个泛型函数或者类型。

你也可以创建泛型类、枚举和结构体。

的共有元素。

简单起见,你可以忽略

2. Swift 教程

本章介绍了Swift 的各种特性及其使用方法,是全书的核心部分。

2.1基础部分

Swift 是iOS 和OS X 应用开发的一门新语言。然而,如果你有C 或者Objective-C 开发经验的话,你会发现Swift 的很多内容都是你熟悉的。

Swift 的类型是在C 和Objective-C

就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值。在Swift 中,值不可变的变量有着广泛的应用,它们就是常量,而且比 C 语言的常量更强大。在Swift 中,

如果你要处理的值不需要改变,那使用常量可以让你的代码更加安全并且更好地表达你的意图。

除了我们熟悉的类型,Swift 还增加了Objective-C 中没有的类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。

Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示―那儿有一个值,

并且它等于x ‖或者―那儿没有值‖。可选有点像在Objective-C 中使用

用在任何类型上,不仅仅是类。可选类型比Objective-C 中的

表现力,它是Swift 许多强大特性的重要组成部分。

Swift 是一个类型安全的语言,可选就是一个很好的例子。Swift 可以让你清楚地知道值

的类型。如果你的代码期望得到一个

你可以在开发阶段尽早发现并修正错误。

常量和变量

常量和变量把一个名字(比如

不能改变,而变量的值可以随意更改。

声明常量和变量

常量和变量必须在使用前声明,用

初始化为0.‖

在这个例子中,允许的最大尝试登录次数被声明为一个常量,因为这个值不会改变。当前尝试登录次数被声明为一个变量,因为每次尝试登录失败的时候都需要增加这个值。

你可以在一行中声明多个常量或者多个变量,用逗号隔开:

注意:如果你的代码中有不需要改变的值,请将它声明为常量。只将需要改变的值声明为变量。

类型标注

当你声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。

这个例子给

声明中的冒号代表着―是...类型‖,所以这行代码可以被理解为::

值,Swift

常量和变量的命名

你可以用任何你喜欢的字符作为常量和变量名,包括Unicode字符:

常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与制表符。尽管常量与变量名中可以包含数字,但是它们不能以数字打头。

一旦你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者以改变其存储的值为其他类型。同时,你也不能将常量与变量进行互转。

注意:如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字围住的方式将其作为名字使用。无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。

你可以更改现有的变量值为其他同类型的值,

和变量不一样,常量的值一旦被确定以后就不能更改了。尝试这样做会在编译时报错:

输出常量和变量

容最后不会加入换行。)

含当前常量和变量的值。

Swift用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift会用当前常量或变量的值替换这些占位符。将常量或变量名放入反斜

注意:字符串插值所有可用的选项在字符串插值这章中讲述。

注释

请将你的代码中的非执行文本注释成提示或者笔记以方便你将来阅读。Swift 的编译器将会在编译代码时自动忽略掉注释部分。

Swift 中的注释与C 语言的注释非常相似。单行注释以双正斜杠作(//)为起始标记:

你也可以进行多行注释,其起始标记为单个正斜杠后跟随一个星号(/*),终止标记为一个星号后跟随单个正斜杠(*/):

与C 语言多行注释不同的是,Swift 的多行注释可以嵌套在其它的多行注释之中。你可以先生成一个多行注释块,然后在这个注释块之中再嵌套成第二个多行注释。终止注释时先插入第二个注释块的终止标记,然后再插入第一个注释块的终止标记:

通过运用嵌套多行注释,你可以快速方便的注释掉一大段代码,即使这段代码之中已经含有了多行注释块。

分号

与其他大部分编程语言不同,Swift 并不强制要求你在每条语句的结尾处使用分号(;),当然,你也可以按照你自己的习惯添加分号。有一种情况下必须要用分号,即你打算在同一行内写多条独立的语句:

本文来源:https://www.bwwdw.com/article/u89q.html

Top