类型别名
- 类型别名对当前的类型定义了另一个名字,类型别名通过使用 typealias 关键字来定义。
typealias newname = Float
typealias Feet = Float
var distance: Feet = 100.0
print(distance)
元组
- 元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
- 可以创建一个类型为 (Int, Int, Int) 或者 (String, Bool) 或者其他任何你想要的组合的元组。
// 最简单的元组,就是在圆括号中,用逗号分割的一组值。
var aTuple = (10, "meng")
// 元素带名称的元组
var aTuple1 = (index: 10, name: "meng")
// 元组的内容分解(decompose)成单独的常量和变量
let (A, B) = aTuple
print(A,B)
// 只需要一部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记
let (C, _) = aTuple
print(C)
// 可以通过下标来访问元组中的单个元素,下标从零开始
aTuple.0
aTuple.1
// 如果有名称的
aTuple1.name
可选类型
- 使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示两种可能: 或者有值, 你可以解析可选类型访问这个值, 或者根本没有值。
- C 和 Objective-C 中并没有可选类型这个概念。最接近的是 Objective-C 中的一个特性,一个方法要不返回一个对象要不返回
nil
,nil
表示“缺少一个合法的对象”。这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用。对于这些类型,Objective-C 方法一般会返回一个特殊值(比如 NSNotFound
)来暗示值缺失。
- Swift 的可选类型可以让你暗示任意类型的值缺失,并不需要一个特殊值。
//创建可选类型 在类型和 ?之间没有空格。
var optionalInteger: Int?
var optionalInteger: Optional<Int>
// 构造器来尝试将一个 String 转换成 Int
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
// 因为该构造器可能会失败,所以它返回一个可选类型(optional)Int,而不是一个 Int。
nil
- nil` 不能用于非可选的常量和变量。如果你的代码中有常量或者变量需要处理值缺失的情况,请把它们声明成对应的可选类型。
- 可选类型类似于Objective-C中指针的nil值,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全。
// 可选变量赋值为 `nil` 来表示它没有值
var serverResponseCode: Int? = 404
serverResponseCode = nil
// 声明一个可选常量或者变量但是没有赋值,它们会自动被设置为 nil
var surveyAnswer: String?
强制解析
- 当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。
// 强制解析可选值,使用感叹号(!):
// 使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值为 nil")
}
Optional("Hello, Swift!")
自动解析
- 在声明可选变量时使用感叹号(!)替换问号(?)。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析。
实例如下:
var myString:String!
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值为 nil")
}
可选绑定
- 使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
// if语句中写一个可选绑定
if let constantName = someOptional {
statements
}
var myString:String?
myString = "Hello, Swift!"
if let yourString = myString {
print("你的字符串值为 - \(yourString)")
}else{
print("你的字符串没有值")
}
本文标题:Swift基础(四)类型别名 元组 可选类型
本文链接:https://www.haomeiwen.com/subject/ymvtxrtx.html
网友评论