Swift笔记
基础部分
变量声明/常量声明
let用于声明常量,var则声明变量
1 | let maximum = 10 |
综上,maximum即为常量,attempt则为变量。
同时,swift也可像c语言一样声明多个变量:
1 | var x = 0.0, y = 0.0, z=0.0 |
类型注解
这个例子给 welcomeMessage
变量添加了类型注解,表示这个变量可以存储 String
类型的值:
1 | var welcomeMessage: String |
声明中的冒号代表着*“是…类型”*
“声明一个类型为 String
,名字为 welcomeMessage
的变量。”
“类型为 String
”的意思是“可以存储任意 String
类型的值。”
welcomeMessage
变量现在可以被设置成任意字符串:
1 | welcomeMessage = "Hello" |
你可以在一行中定义多个同样类型的变量,用逗号分割,并在最后一个变量名之后添加类型注解:
1 | var red, green, blue: Double |
常量和变量的命名
命名可以用任何字符(包括unicode)
1 | let π = 3.14159 |
常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字
注释
请将你的代码中的非执行文本注释成提示或者笔记以方便你将来阅读。Swift 的编译器将会在编译代码时自动忽略掉注释部分。
Swift 中的注释与 C 语言的注释非常相似。单行注释以双正斜杠(//
)作为起始标记:
1 | // 这是一个注释 |
你也可以进行多行注释,其起始标记为单个正斜杠后跟随一个星号(/*
),终止标记为一个星号后跟随单个正斜杠(*/
):
1 | /* 这也是一个注释, |
与 C 语言多行注释不同,Swift 的多行注释可以嵌套在其它的多行注释之中。你可以先生成一个多行注释块,然后在这个注释块之中再嵌套成第二个多行注释。终止注释时先插入第二个注释块的终止标记,然后再插入第一个注释块的终止标记:
1 | /* 这是第一个多行注释的开头 |
通过运用嵌套多行注释,可以快速方便的注释掉一大段代码
分号
与其他大部分编程语言不同,Swift 并不强制要求你在每条语句的结尾处使用分号(;
)但是在同一行内写多条独立的语句必须使用
1 | let cat = "🐱"; print(cat) |
整数
Swift 提供了8、16、32和64位的有符号和无符号整数类型。这些整数类型和 C 语言的命名方式很像,比如8位无符号整数类型是 UInt8
,32位有符号整数类型是 Int32
。就像 Swift 的其他类型一样,整数类型采用大写命名法。
UInt的最大值与Int相同,取决于其后面的数字:
1 | var minnum = UInt8.min //值为0 |
- 注意
尽量不要使用 UInt
,除非你真的需要存储一个和当前平台原生字长相同的无符号整数。除了这种情况,最好使用 Int
,即使你要存储的值已知是非负的。统一使用 Int
可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推断
浮点数
Double
表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。Float
表示32位浮点数。精度要求不高的话可以使用此类型。
类型安全和类型推断
Swift 是一个*类型安全(type safe)*的语言。类型安全的语言可以让你清楚地知道代码要处理的值的类型。如果你的代码需要一个 String
,你绝对不可能不小心传进去一个 Int
。
由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。
数值型字面量
整数字面量可以被写作:
- 一个十进制数,没有前缀
- 一个二进制数,前缀是
0b
- 一个八进制数,前缀是
0o
- 一个十六进制数,前缀是
0x
下面的所有整数字面量的十进制值都是 17
:
1 | let decimalInteger = 17 |
如果一个十进制数的指数为 exp
,那这个数相当于基数和10^exp 的乘积:
1.25e2
表示 1.25 × 10^2,等于125.0
。1.25e-2
表示 1.25 × 10^-2,等于0.0125
。
如果一个十六进制数的指数为 exp
,那这个数相当于基数和2^exp 的乘积:
0xFp2
表示 15 × 2^2,等于60.0
。0xFp-2
表示 15 × 2^-2,等于3.75
。
下面的这些浮点字面量都等于十进制的 12.1875
:
1 | let decimalDouble = 12.1875 |
数值类字面量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字面量:
1 | let paddedDouble = 000123.456 |
整数和浮点数转换
整数和浮点数的转换必须显式指定类型:
1 | let three = 3 |
这个例子中,常量 three
的值被用来创建一个 Double
类型的值,所以加号两边的数类型须相同。如果不进行转换,两者无法相加。
总结:当俩变量类型相同时才可进行相加
类型别名
*类型别名(type aliases)*就是给现有类型定义另一个名字。你可以使用 typealias
关键字来定义类型别名。
当你想要给现有类型起一个更有意义的名字时,类型别名非常有用。假设你正在处理特定长度的外部资源的数据:
1 | typealias AudioSample = UInt16 |
定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名:
1 | var maxAmplitudeFound = AudioSample.min |
本例中,AudioSample
被定义为 UInt16
的一个别名。因为它是别名,AudioSample.min
实际上是 UInt16.min
,所以会给 maxAmplitudeFound
赋一个初值 0
。