类型别名
类型别名(type aliases)就是给现有类型定义另一个名字。你可以使用 typealias 关键字来定义类型别名。
typealias AudioSample = UInt16
定义了之后,可以使用这个别名来代替之前的
var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound 现在是 0(本例中, AudioSample 被定义为 UInt16 的一个别名。因为它是别名, AudioSample.min 实际上是 UInt16.mi ,所以会给 赋一个初值 。)
BOOL(布尔值)
Swift 有一个基本的布尔(Boolean)类型,叫做 Bool 。布尔值指逻辑上的(logical,因为它们只能是真或者 假。不再有YES或者NO这两个,会报错,而且也敲不出来了。Swift 有两个布尔常量, true 和 false :
let orangesAreOrange = true let turnipsAreDelicious = false
orangesAreOrange 和 turnipsAreDelicious 的类型会被推断为 Bool ,因为它们的初值是布尔字面量。就像之 前提到的 Int 和 Double 一样,如果你创建变量的时候给它们赋值 true 或者 false ,那你不需要将常量或者变量 声明为 Bool 类型。初始化常量或者变量的时候如果所赋的值类型已知,就可以触发类型推断,这让 Swift 代码 更加简洁并且可读性更高。
当你编写条件语句比如 if 语句的时候,布尔值非常有用:
if turnipsAreDelicious { print("Mmm, tasty turnips!")
} else {print("Eww, turnips are horrible.")
}// 输出 "Eww, turnips are horrible."
条件语句,例如 if ,请参考控制流。
如果你在需要使用 Bool 类型的地方使用了非布尔值,Swift 的类型安全机制会报错。下面的例子会报告一个编译 时错误:
let i = 1 if i {
// 这个例子不会通过编译,会报错 }
然而,下面的例子是合法的:
let i = 1 if i == 1 {
// 这个例子会编译成功
}
i == 1的比较结果是BOOL 类型,所以第二个例子可以通过类型检查。类似 这样的比较,请参考基本操作 符。
元祖
元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
let http404Error = (404, "Not Found")// http404Error 的类型是 (Int, String),值是 (404, "Not Found")
(404, "Not Found") 元组把一个 Int 值和一个 String 值组合起来表示 HTTP 状态码的两个部分:一个数字和一 个人类可读的描述。这个元组可以被描述为“一个类型为 (Int, String) 的元组”。
你可以将一个元组的内容分解(decompose)成单独的常量和变量,然后你就可以正常使用它们了:
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")// 输出 "The status code is 404"
print("The status message is \(statusMessage)") // 输出 "The status message is Not Found"
如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线( _ )标记:
(Int, I
let (justTheStatusCode, _) = http404Error print("The status code is \(justTheStatusCode)") // 输出 "The status code is 404”
而且你还可以像访问数组那样取得第零个位置以及其他位置的值是神马(下标是从0开始的哦)
print("The status code is \(http404Error.0)")// 输出 "The status code is 404"print("The status message is \(http404Error.1)") // 输出 "The status message is Not Found"
当然了你还可以在定义元祖的时候给单个元素进行命名:
let http200Status = (statusCode: 200, description: "OK")
给元组中的元素命名后,你可以通过名字来获取这些元素的值:
print("The status code is \(http200Status.statusCode)")
// 输出 "The status code is 200"
print("The status message is \(http200Status.description)") // 输出 "The status message is OK"