Swift(三、元组-可选类型及其解析)

前端之家收集整理的这篇文章主要介绍了Swift(三、元组-可选类型及其解析)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~

2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。


三、元组-可选类型及其解析@H_301_10@

1、元组

a、元组将任意数据类型组装成一个复合值(不要求相同类型)
b、元组在作为函数返回值时特别适用,可以为函数返回更多的信息


1.1、元组的创建及访问

//可以理解为key-value,x对应1,y对应2
let (x,y) = (1,2)
print("x = \(x),y = \(y)")

let http404Error = (404,"Not Found")
print(http404Error)

//元组访问
print(http404Error.0,http404Error.1)

let (statusCode,statusMessage) = http404Error
print(statusCode,statusMessage)

//如果只想访问一部分元组,可用下划线分解
let (justTheStatusCode,_) = http404Error
print(justTheStatusCode)

//元组创建方式:元组单个命名
let http200Status = (statusCode:200,description:"OK")
print(http200Status.statusCode,http200Status.description)

Output:

x = 1,y = 2
(404,"Not Found")
404 Not Found
404 Not Found
404
200 OK

2、可选类型

有值等于固定值 或者 没有值不存在为nil(?的用法

2.1、转化

譬如讲一个String转化为Int,但是并不是所有String都能转换

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
print(convertedNumber)

Output:

Optional(123)

其返回的是一个可选类型,Int?


2.2、nil的讨论

var responseCode:Int? = 404     //要么存在,值为404
responseCode = nil              //responseCode不包含值

OC中的nil是指向不存在对象的指针,而Swift的nil非指针,是一个确定的值表示值缺失,任何类型的可选类型都能赋值为nil,而不仅限于对象类型,并且更安全

注意点
1、 Swift里面nil,不能用于非可选类型
2、 因此在代码中如果常量或变量需要处理值缺失的情况,则需要声明为对应的可选类型
3、 如果定义的可选类型的对象不提供默认值,那么默认为nil

第3点对应的情况

var strValue:String?                //不提供默认值,默认为nil
let hashValue = strValue?.hashValue //问号的意思是询问可选量是否响应后面的方法,不存在那么hashValue的常量也是不存在,存在则调后面的方法
print(hashValue)                    //打印结果为nil

因此Optional值操作,可以用来判断是否响应方法


3、可选类型的解析

可选类型每次访问都会提取并检测其值是否存在,但有时候根据程序结构是可以推断可选量在首次赋值后必然存在值,那么就不需要验证值是否存在,可以使用!进行解包获取它的值,或者使用Optional Binding


3.1、解析(!的使用)

let possibleString:String? = "An optinal string"
print(possibleString!)     //解包,确定possibleString一定存在,加!不需要每次验证是否存在

let stringValue = possibleString!.hashValue     //确定存在选择解包,否则加?
print(stringValue)

3.2、Optional binding 可选绑定

结合控制流(if or while),如果有值然后解析

3.3、隐式解析

直接在定义的时候加!,而不是每次使用时加!。用于第一次赋值以后,可以确定一个可选类型总会有值的情况

let testString:String! = "Test String"
print(testString)

Output:

Test String

解析的使用场景总结 1、强制对可选量进行解包 2、声明 隐式解包的可选类型,一般用于类中的属性

猜你在找的Swift相关文章