没有合适的资源?快使用搜索试试~ 我知道了~
Swift 编程语言 4.0.3
需积分: 9 12 下载量 150 浏览量
2018-03-19
16:59:51
上传
评论
收藏 5.34MB PDF 举报
温馨提示
试读
275页
《Swift 编程语言》的翻译 已经同步更新 Swift 4.0.3 正式版 搬运:https://www.cnswift.org/ 整理的pdf 方便大家阅读
资源推荐
资源详情
资源评论
基础内容
cnswift.org/the-basics
Swift 是一门全新的用于开发 iOS, OS X 以及 watchOS 应用的编程语言。不过,如果你有 C
或者Objective-C 语言开发经验的话,Swift 的许多地方都会让你感到熟悉。
Swift 为所有 C 和 Objective-C 的类型提供了自己的版本,包括整型值的 Int ,浮点数值的
Double 和 Float ,布尔量值的 Bool ,字符串值的 String 。如同集合类型中描述的那样,
Swift 同样也为三个主要的集合类型提供了更高效的版本, Array , Set 和 Dictionary 。
和 C 一样,Swift 用变量存储和调用值,通过变量名来做区分。Swift 中也大量采用了值不可
变的变量。它们就是所谓的常量,但是它们比 C 中的常量更加给力。当你所处理的值不需要
更改时,使用常量会让你的代码更加安全、简洁地表达你的意图。
除了我们熟悉的类型以外,Swift 还增加了 Objective-C 中没有的类型,比如元组。元组允许
你来创建和传递一组数据。你可以利用元组在一个函数中以单个复合值的形式返回多个值。
Swift 还增加了可选项,用来处理没有值的情况。可选项意味着要么“这里
有
一个值,它
等
于
x”要么“这里根本
没有
值”。可选项类似于 Objective-C 中的 nil 指针,但是不只是类,可选
项也可以用在所有的类型上。可选项比 Objective-C 中的 nil 指针更安全、更易读,他也是
Swift 语言中许多重要功能的核心。
可选项充分证明了 Swift 是一门
类型安全
的语言。Swift 帮助你明确代码可以操作值的类型。
如果你的一段代码预期得到一个 String ,类型会安全地阻止你不小心传入 Int 。在开发过程
中,这个限制能帮助你在开发过程中更早地发现并修复错误。
常量和变量
常量和变量把名字(例如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一
个特定类型的值(例如数字 10 或者字符串 “Hello”)关联起来。
常量
的值一旦设置好便不能
再被更改,然而
变量
可以在将来被设置为不同的值。
声明常量和变量
常量和变量必须在使用前被声明,使用关键字 let 来声明常量,使用关键字 var 来声明变
量。这里有一个如何利用常量和变量记录用户登录次数的栗子:
1
2
letmaximumNumberOfLoginAttempts=10
varcurrentLoginAttempt=0
这段代码可以读作:
“声明一个叫做 maximumNumberOfLoginAttempts 的新常量,并设置值为 10 。然后声明一
个叫做 currentLoginAttempt 的新变量, 并且给他一个初始值 0
。。
”
在这个栗子中,登录次数允许的最大值被声明为一个常量,因为最大值永远不会更改。当前
尝试登录的次数被声明为一个变量,因为这个值在每次登录尝试失败之后会递增。
1/17
你可以在一行中声明多个变量或常量,用逗号分隔:
1 varx=0.0,y=0.0,z=0.0
注意
在你的代码中,如果存储的值不会改变,请用 let 关键字将之声明为一个常量。只有储
存会改变的值时才使用变量。
类型标注
你可以在声明一个变量或常量的时候提供
类型标注
,来明确变量或常量能够储存值的类型。
添加类型标注的方法是在变量或常量的名字后边加一个冒号,再跟一个空格,最后加上要使
用的类型名称。
下面这个栗子给一个叫做 welcomeMessage 的变量添加了类型标注,明确这个变量可以存
储 String 类型的值。
1 varwelcomeMessage:String
声明中的冒号的意思是“是…类型”,所以上面的代码可以读作:
“声明一个叫做 welcomMessage 的变量,他的类型是 String ”
我们说“类型是 String ”就意味着“可以存储任何 String 值”。也可以理解为“这类东西”(或
者“这种东西”)可以被存储进去。
现在这个 welcomeMessage 变量就可以被设置到任何字符串中而不会报错了:
1 welcomeMessage="Hello"
你可以在一行中定义多个相关的变量为相同的类型,用逗号分隔,只要在最后的变量名字后
边加上类型标注。
1 varred,green,blue:Double
注意
实际上,你并不需要经常使用类型标注。如果你在定义一个常量或者变量的时候就给
他设定一个初始值,那么 Swift 就像类型安全和类型推断中描述的那样,几乎都可以推
断出这个常量或变量的类型。在上面 welcomeMessage 的栗子中,没有提供初始值,所
以 welcomeMessage 这个变量使用了类型标注来明确它的类型而不是通过初始值的类型
推断出来的。
命名常量和变量
常量和变量的名字几乎可以使用任何字符,甚至包括 Unicode 字符:
1
2
3
letπ=3.14159
let你好="你好世界"
let="dogcow"
常量和变量的名字不能包含空白字符、数学符号、箭头、保留的(或者无效的)Unicode 码
2/17
位、连线和制表符。也不能以数字开头,尽管数字几乎可以使用在名字其他的任何地方。
一旦你声明了一个确定类型的常量或者变量,就不能使用相同的名字再次进行声明,也不能
让它改存其他类型的值。常量和变量之间也不能互换。
注意
如果你需要使用 Swift 保留的关键字来给常量或变量命名,可以使用反引号( ` )包围
它来作为名称。总之,除非别无选择,避免使用关键字作为名字除非你确实别无选
择。
你可以把现有变量的值更改为其他相同类型的值。在这个栗子中 friendlyWelcome 的值从
“Hello!” 改变为 “Bonjour!”
1
2
3
varfriendlyWelcome="Hello!"
friendlyWelcome="Bonjour!"
// friendlyWelcome 现在是 "Bonjour!"
不同于变量,常量的值一旦设定则不能再被改变。尝试这么做将会在你代码编译时导致报
错:
1
2
3
letlanguageName="Swift"
languageName="Swift++"
// this is a compile-time error - languageName cannot be changed
输出常量和变量
你可以使用 print(_:separator:terminator:) 函数来打印当前常量和变量中的值。
1
2
print(friendlyWelcome)
// 输出 "Bonjour!"
print(_:separator:terminator:) 是一个用来把一个或者多个值用合适的方式输出的全局函数。
比如说,在 Xcode 中 print(_:separator:terminator:) 函数输出的内容会显示在Xcode的
“console” 面板上。 separator 和 terminator 形式参数有默认值,所以你可以在调用这个函数
的时候忽略它们。默认来说,函数通过在行末尾添加换行符来结束输出。要想输出不带换行
符的值,那就传一个空的换行符作为结束——比如说, print(someValue,terminator:"") 。更
多关于带有默认值的形式参数信息,见默认形式参数值。
Swift 使用
字符串插值
的方式来把常量名或者变量名当做占位符加入到更长的字符串中,然
后让 Swift 用常量或变量的当前值替换这些占位符。将常量或变量名放入圆括号中并在括号
前使用反斜杠将其转义:
1
2
print("The current value of friendlyWelcome is \(friendlyWelcome)")
// 输出 "The current value of friendlyWelcome is Bonjour!"
注意
字符串插值中描述了你可以使用字符串插值的所有选项。
注释
3/17
使用注释来将不需要执行的文本放入的代码当中,作为标记或者你自己的提醒。当 Swift 编
译器在编译代码的时候会忽略掉你的注释。
Swift 中的注释和 C 的注释基本相同。单行注释用两个斜杠开头( // ):
1 // 这是一个注释
多行的注释以一个斜杠加一个星号开头( /* ),以一个星号加斜杠结尾( */ )。
1
2
/* this is also a comment,
but written over multiple lines */
和 C 中的多行注释不同的是, Swift 语言中的多行的注释可以内嵌在其它的多行注释之中,
你可以在多行注释中先开启一个注释块,接着再开启另一个注释块。然后关闭第二个注释
块,再关闭第一个注释块。
1
2
3
/* 这是第一个多行注释的开头
/* 这是第二个嵌套在内的注释块 */
这是第一个注释块的结尾*/
内嵌多行注释,可以便捷地注释掉一大段代码块,即使这段代码块中已经有了多行注释。
分号
和许多其他的语言不同,Swift 并不要求你在每一句代码结尾写分号( ; ),当然如果你想写
的话也没问题。总之,如果你想在一行里写多句代码,分号还
是
需要的。
1
2
letcat="";print(cat)
// 输出 ""
整数
整数
就是没有小数部分的数字,比如 42 和 -23 。整数可以是
有符号
(正,零或者负),或
者
无符号
(正数或零)。
Swift 提供了 8,16,32 和 64 位编码的有符号和无符号整数,这些整数类型的命名方式和 C
相似,例如 8 位无符号整数的类型是 UInt8 ,32 位有符号整数的类型是 Int32 。与 Swift 中
的其他类型相同,这些整数类型也用开头大写命名法。
整数范围
你可以通过 min 和 max 属性来访问每个整数类型的最小值和最大值:
1
2
letminValue=UInt8.min// 最小值是 0, 值的类型是 UInt8
letmaxValue=UInt8.max// 最大值是 255, 值得类型是 UInt8
这些属性的值都是自适应大小的数字类型(比如说上边栗子里的 UInt8 )并且因此可以在表
达式中与在其他相同类型值同用。
Int
4/17
在大多数情况下,你不需要在你的代码中为整数设置一个特定的长度。Swift 提供了一个额外
的整数类型: Int ,它拥有与当前平台的原生字相同的长度。
在32位平台上, Int 的长度和 Int32相同。
在64位平台上, Int 的长度和 Int64 相同。
除非你需操作特定长度的整数,否则请尽量在代码中使用 Int 作为你的整数的值类型。这样
能提高代码的统一性和兼容性,即使在 32 位的平台上, Int 也可以存 -2,147,483,648到
2,147,483,647之间的任意值,对于大多数整数区间来说完全够用了。
UInt
Swift 也提供了一种无符号的整数类型, UInt ,它和当前平台的原生字长度相同。
在32位平台上, UInt 长度和 UInt32 长度相同。
在64位平台上, UInt 长度和 UInt64 长度相同。
注意
只在的确需要存储一个和当前平台原生字长度相同的无符号整数的时候才使用 UInt 。
其他情况下,推荐使用 Int
,,
即使已经知道存储的值都是非负的。如同类型安全和类型
推断中描述的那样,统一使用 Int 会提高代码的兼容性,同时可以避免不同数字类型之
间的转换问题,也符合整数的类型推断。
浮点数
浮点数
是有小数的数字,比如 3.14159 , 0.1 , 和 -273.15。
浮点类型相比整数类型来说能表示更大范围的值,可以存储比 Int 类型更大或者更小的数
字。Swift 提供了两种有符号的浮点数类型。
Double代表 64 位的浮点数。
Float 代表 32 位的浮点数。
注意
Double 有至少 15 位数字的精度,而 Float 的精度只有 6 位。具体使用哪种浮点类型取
决于你代码需要处理的值范围。在两种类型都可以的情况下,推荐使用 Double 类型。
类型安全和类型推断
Swift 是一门类型安全的语言。类型安全的语言可以让你清楚地知道代码可以处理的值的类
型。如果你的一部分代码期望获得 String
,,
你就不能错误的传给它一个 Int
。。
因为 Swift 是类型安全的,他在编译代码的时候会进行类型检查,任何不匹配的类型都会被
标记为错误。这会帮助你在开发阶段更早的发现并修复错误。
当你操作不同类型的值时,类型检查能帮助你避免错误。当然,这并不意味着你得为每一个
常量或变量声明一个特定的类型。如果你没有为所需要的值进行类型声明,Swift 会使用类型
推断的功能推断出合适的类型。通过检查你给变量赋的值,类型推断能够在编译阶段自动的
推断出值的类型。
5/17
剩余274页未读,继续阅读
资源评论
fengxinsen
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功