Type Aliases (类型别名)
类型别名是个已经存在的类型定义另一个名字.定义类型别名的时候,使用关键字typealias.
当你想要使用名字来引用一个已经存在的类型时,类型别名将非常有效,并且更适合代码的上下文理解.例如,当要处理指定大小的一个数据时:
typealias AudioSample = UInt16
一旦定义了一个类型别名,就可以在任何地方来代替原来的类型名:
var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound is now 0
上面的代码里, AudioSample被定义为UInt16的别名,因为它是一个别名,所以调用AudioSample.min实际上是调用UInt16.min,它最后给变量 maxAmplitudeFound赋值了一个初始 化的0.
Booleans (布尔类型)
Swift有一个基本的布尔类型:Bool,布尔类型的值用来进行逻辑判断.因为Bool值只能是 true或者false.在Swift中,系统提供了两个布尔类型的常量:true 和 false:
let orangesAreOrange = true
let turnipsAreDelicious = false
代码中,通过使用布尔类型值来初始化,因此常量orangesAreOrange 和 turnipsAreDelicious 的类型是Bool.与使用Int和Double一样,上面的代码里在给常量赋值true或false后,就不 需要再声明它们是布尔类型了.在Swift中,类型判断帮助代码具有更精确和可读性,当给常量或者变量初始化一个已知类型的值的时候,常量或变量的类型就是这个值的类型.
在进行条件判断的时候,布尔类型的值特别有用,例如下面代码中的if语句:
if turnipsAreDelicious {
println("Mmm, tasty turnips!")
} else {
println("Eww, turnips are horrible.")
}
// prints "Eww, turnips are horrible.”
if条件判断语句会在流程控制中讲到.
Swift中,类型安全机制禁止给非布尔类型的值赋值布尔类型.下面的代码将会报告一个编译器错误:
let i = 1
if i {
// this example will not compile, and will report an error
}
但是,下面这样的代码是正确的:
let i = 1
if i == 1 {
// this example will compile successfully
}
因为 i == 1 比较的结果是布尔类型,因此可以通过类型安全检查.
与Swift的其他类型安全一样,布尔类型检测避免了偶尔的错误和潜在的代码问题.
Tuples (元组)
元组是将多个值组合起来,形成一个复合的值.在元组内部的值,可以是任意类型,也可以互不相同.
在下面的例子中,(404, "Not Found")就是一个描述HTTP的状态编码的元组.HTTP状态编码是当你进行web访问时,从web服务器返回的特定的值. 404, "Not Found"这个状态码表 示访问的网页不存在.
let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")
元组(404, "Not Found") 将一个Int类型 和一个 String类型组合在一起后赋值给HTTP状态编码:一个数值和一个可读性的描述,它也可以这样描述:一个(Int,String)类型的元组.
创建元组时,可以任意排列类型,可以包含任意不同的类型.例如可以定义一个(Int,Int,Int)类型的元组,也可以定义一个(String,Bool)类型的元组,或者其他任意你需要的类型.
解析元组,可以像下面代码中的方式,独立访问元组中的常量或者变量:
let (statusCode, statusMessage) = http404Error
println("The status code is \(statusCode)")
// prints "The status code is 404"
println("The status message is \(statusMessage)")
// prints "The status message is Not Found”
如果仅仅需要处理元组的某些值,忽略的部分使用(_)来处理.
let (justTheStatusCode, _) = http404Error
println("The status code is \(justTheStatusCode)")
// prints "The status code is 404
访问元组的独立元素值,也可以使用索引.元组的索引是以0开始:
println("The status code is \(http404Error.0)")
// prints "The status code is 404"
println("The status message is \(http404Error.1)")
// prints "The status message is Not Found”
在元组定义的时候,可以对每个元素进行命名:
let http200Status = (statusCode: 200, description: "OK")
如果给元素进行了命名,可以通过这个元素的名字来访问它们的值:
println("The status code is \(http200Status.statusCode)")
// prints "The status code is 200"
println("The status message is \(http200Status.description)")
// prints "The status message is OK”
在接收函数的返回值时,元组是非常有用的.一个返回网页的函数可能需要返回(Int,String)类型的元组来描述网页获取成功或者失败.通过返回两个不同的值,每个值的类型也不同的元 组,函数可以提供更多的输出信息,这样要比它只能返回单一类型的一个单一值更有效.
注意点:
临时将相互关联的值组合起来,元组是非常有效的.但不适合用来创建复杂的数据类型.如果你要保存一个超出局部范围的全局的数据,使用类或者结构体要更加适合.
Welcome to Swift (苹果官方Swift文档初译与注解十一)---70~76页(第二章),布布扣,bubuko.com