包含数据类型:整型(Int)、浮点型(Double、Float)、布尔型(Bool)、文本型(String)、集合类(Array、Set、Dictionary)、可选类型(Optional)、元组(Tuple)
常量和变量
声明常量和变量
常量用let声明,变量用var声明。
类型注解
即在声明常量或变量时,加上类型注解,说明存储值的类型。
例:var welcomeMessage: String
常量和变量的命名
1、常量和变量名可以包含任何字符,包括 Unicode 字符
let π = 3.14159
let 你好 = "你好世界"
let 🐶🐮 = "dogcow"
2、常量与变量名不能包含数学符号、箭头、保留的(或非法的)Unicode码位、连线、制表符,且不能以数字开头
输出常量与变量
var friendlyWelcome = 123
print(friendlyWelcome) //123
注释
与大部分语言相似。
//这是一个注释
/*这是一个
多行注释*/
注:可进行嵌套多行注释
/*这是一个注释的开头
/*这是被嵌套的注释*/
这是一个注释的结尾*/
分号
并不强求在每条语句后面使用分号,但在同一行写多条独立语句的时候必须要用
var cat = "miao"; print(cat)
整数
整数范围
可以通过min、max来获取对应类型的最小值与最大值
Int 整数类型
UInt 无符号整数类型
数值型字面量
-
一个十进制数,没有前缀
-
一个二进制数,前缀是
0b
-
一个八进制数,前缀是
0o
-
一个十六进制数,前缀是
0x
let decimalInteger = 17
let binaryInteger = 0b10001 // 二进制的17
let octalInteger = 0o21 // 八进制的17
let hexadecimalInteger = 0x11 // 十六进制的17
类型别名
就是给现有类型定义另一个名字,使用typealias来定义
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min //0
因为使用了别名,即此时AudioSample 与 UInt16是相等的,所以maxAmplitudeFound得到的就是UInt16的最小值0
元组
即包含多个值的复合值,组内元素可以是任意类型,且不要求同类型
let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")
可选类型(optionals)
var serverResponseCode: Int? = 404
//serverResponseCode 包含一个可选的Int值 即当读取数据时,可能为Int值也可能没有值。但不能为其他值(Bool、String)
nil代表没有值,若声明常量或变量时没有赋值,即会自动设置为nil
隐式解析可选类型
一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都使用解析来获取可选值。下面的例子展示了可选类型 String
和隐式解析可选类型 String
之间的区别:
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要感叹号来获取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感叹号
错误处理
func makeASandwich() throws {
// ...
}
do {
try makeASandwich()
eatASandwich()
} catch SandwichError.outOfCleanDishes {
washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
buyGroceries(ingredients)
}
在此例中,makeASandwich()
(做一个三明治)函数会抛出一个错误消息如果没有干净的盘子或者某个原料缺失。因为 makeASandwich()
抛出错误,函数调用被包裹在 try
表达式中。将函数包裹在一个 do
语句中,任何被抛出的错误会被传播到提供的 catch
从句中。
如果没有错误被抛出,eatASandwich()
函数会被调用。如果一个匹配 SandwichError.outOfCleanDishes
的错误被抛出,washDishes()
函数会被调用。如果一个匹配 SandwichError.missingIngredients
的错误被抛出,buyGroceries(_:)
函数会被调用,并且使用 catch
所捕捉到的关联值 [String]
作为参数。