Swift-元祖、可选值

元祖

概念

在其他语言中很早就有元祖这个概念,但是对于Objective-C程序员来说这是一个新的概念,什么是元祖呢?元祖就是讲多个相同或者不用类型的值用一个小括号括起来就是一个元祖

1
2
3
4
5
6
/// 声明一个元祖
let student = ("daisuke", 24, 174)
// 访问元祖
print(student.0)
print(student.1)
print(student.2)

定义

元祖其实和结构体很像,只是不需要提前定义类型。那么如果不定义类型元祖是什么类型呢?元祖其实是复合类型,所以小括号可以写任意类型,当然你也可以定义类型

  • 常规定义
1
2
let teacher : (String, Int, Int) = ("daisuke", 40, 170)
let student2 : (String, String, Int) = ("daisuke", "niubility", 174)
  • 指明应用元祖元素的名称定义
1
2
3
4
let student2 = (name: "daisuke", age: 24, height: 174)
print(student2.name)
print(student2.age)
print(student2.height)
  • 通过制定的名称提取元祖对应的值,会将对应位置的值,赋值给对应位置的名称
1
2
3
4
let (name, age, height) = ("daisuke", 24, 174)
print(name)
print(age)
print(height)

如果不关心元祖中的某个值,可以利用_通配符忽略提取

1
2
3
let (name1, age1, _) = ("daisuke", 24, 174)
print(name1)
print(age1)

总结

在以前没有元祖之前,C和OC语言时候通过传入指针或者返回结构体方式来返回多个值的,而有了元祖之后就可以实现让一个函数返回多个值了


可选值optionals

概念

可选值,顾名思义就是可有可无,那么optionals就有两种两种状态了,一是有值,而是没有值,也就是nil

1
2
3
4
5
// 有值
var nameValue: String? = "daisuke"
// 没有值
var ageValue: Int?
var heightValue: Int? = nil

应用

  • 可选值可以利用if语句来进行判断
1
2
3
4
5
6
7
8
9
var weightVaule: Int?
if weightVaule != nil
{
print(weightVaule)
} else {
print(weightVaule)
}
// var weightVaule: Int? 结果是:nil
// var weightVaule: Int? = 10 结果是:Optional(10)
  • 提取可选类型的值

(强制解析),会将optionValue中的整形值强制拿出来赋值给变量result,换句话来说就是告诉编译器optionValue一定有值,因为可选类型有两种状态,有值没有值,所以需要告诉编译器到底有没有值。需要注意的是:如果强制解析optionValue,但是optionValue中没有值时会引发一个运行错误

1
2
3
var optionAge: Int? = 24
var result: Int = optionAge!
print(result)
1
2
3
4
5
// 报错
// fatal error: unexpectedly found nil while unwrapping an Optional value
var optionAge1: Int?
var result1: Int = optionAge1!
print(result1)
  • 可选绑定

为了更安全的解析可选类型的值,一般情况下使用可选绑定。什么是可选绑定? 如果optionValue没有值就不会做任何操作,如果optionValue有值会返回true,并将optionValue的值返回给result,然后继续执行大括号的代码,这就是可选绑定

1
2
3
4
5
6
7
8
9
10
11
12
// 字符串
var optionName: String? = "daisuke"
if let result = optionName
{
print(result)
}
// 整数
var optionAge: Int? = 24
if let result = optionAge
{
print(result)
}

总结

1、可选类型就是两个状态,有值和没有值。 2、一般情况下使用可选绑定方式进行可选值的获取