Swfit学习笔记三:基本数据类型

 元组 Tuples
 
 定义:把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
 
// 模拟一个文具套装,里面有 铅笔:2     橡皮:1     文具盒:15
var bundle: (pencialPrice: Int, eraserPrice: Int, casePrice: Int) = (2, 1, 15 )
var pencialPrice = bundle.pencialPrice
var eraserPrice  = bundle.eraserPrice
var casePrice    = bundle.casePrice
 
var bundle2: (Int, Int, Int) = (2, 1, 15 )
var a11 = bundle2.0
var a22 = bundle2.1
var a33 = bundle2.2
 
// 元组的分解
var (n1, n2, n3) = bundle2
 
// 如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线 _ 标记
var (m1, _, m3) = bundle2
 
元组进行比较运算的原则
 
  1. 元组中元素的个数必须相同
  2. 元组中对应位置的元素类型必须相同
  3. 元组中的元素必须可以比较,Bool 类型的值不能进行比较
 
 首先进行第一个元素的比较,如果比较出结果,则直接返回,不再进行后续比较,如果没有比较出结果,则依次进行后续比较
 
 (1, "zebra") < (2, "apple")
 (3, "apple") < (3, "bird")
 (4, "dog") == (4, "dog")
 
 
 
 
可选类型 Optional
 
  • 定义变量时,如果指定是可选的,表示该变量可以有一个指定的类型的值,也可以为 nil;可选值只有两种:如果没有赋值,则为 nil;如果已经赋值,则为原类型的值
  • 定义变量时,在类型后面添加一个 ?表示该变量是可选的
  • 变量可选项的默认值是 nil
  • 常量可选项没有默认值,主要用于在构造函数中给常量设置初始值
//: num 可以是一个整数,也可以是 nil,注意如果为 nil,不能参与计算
let num: Int? = 10

// Optional 可能有两个值(None / Some)

// 格式(1.自动推导):var 变量名: Optional = 值
let x: Optional = 20

// 格式(2.使用泛型):var 变量名: Optional<类型> = 值
let y: Optional<Int> = 10

// 格式(3.简化格式):var 变量名: 类型? = 值
let z: Int? = 10

/*
 * 可选值在参与计算前,必须’解包 unwarping‘
 * 只有’解包(unwarp)’后才能参与计算
 * 在变量后添加一个 ‘!’,可以强行解包,即:从可选值中强行获取对应的非空值,如果真的为 nil,程序就会崩溃
 * 程序员要对每一个 ’!’ 负责
 */
  • 如果 Optional 值是 nil,不允许参与计算
  • 只有解包(unwrap)后台才能参与计算
  • 在变量后添加一个 !,可以强行解包
 
 
注意:必须要确保解包后的值不是 nil,否则会报错
 

//: num 可以是一个整数,也可以是 nil,注意如果为 nil,不能参与计算
let num: Int? = 10

//: 如果 num 为 nil,使用 `!` 强行解包会报错
let r1 = num! + 100

//: 使用以下判断,当 num 为 nil 时,if 分支中的代码不会执行
if let n = num {
    let r = n + 10
}

unexpectedly found nil while unwrapping an Optional value

翻译

 
在[解包]一个可选值时发现 nil
 
 
 
? 与 !
 
?    如果出现在类型的后面,它表示将类型包装成 Optional 类型
?     如果出现在实例的后面,它表示的是可选链的调用
!      如果出现在类型的后面,它表示的是隐式解析
!      如果出现要实例的后面,它表示的是将 Optional 的实例进行拆包操作
 
原文地址:https://www.cnblogs.com/fanxiaocong/p/6390470.html