Swift里的元组和可选类型

元组(Tuples)

元组将多个值分组为一个复合值,元祖中的值可以是任何类型,而不比彼此相通。

定义一个元组

例:

let httpStatus = (statusCode: 200, description: "ok")

读取数据:

if httpStatus.statusCode == 200 {
// ...
}

元组作为函数的返回值

使用元组作为返回值,可以返回多个返回值,而且返回的多个值的类型不受限制。

元组作为函数的返回值,在接收端需要知道元组的每个元素的类型,从而不至于取值出错。

元组的适用范围

注意:元组适用于简单的一组数据,如果数据结构比较多,太过复杂的话,不建议使用元组,这时候使用类或者结构体来定义复杂的数据结构。

可选类型(Optionals)

在Objective-C中接触过Option,Swift中的Optionals好像和OC中的不太一样。

在Swift中的Optional,适用于缺省值的情况下。

Optional和Option还不是一个东西,Swift中的可选这个概念在C和OC中是没有的。在OC中与Swift的Optional比较相近的概念是将nil作为返回值。返回nil,表示没有有效的对象,nil只适用于对象,不适用于基本的数据结构或者枚举,基本数据返回nil时,往往会返回的是0。对于这些类型,在OC中一般是返回一个特定的值,例如枚举的话我们默认返回0,定义为xxxdefault、xxxNone等。

定义可选类型

let number : int ?

在数据类型后面添加一个问号,表示这是一个可选值类型。可能是int,也可能不是。

示例分析

let result: Int? = 30
print(result)

上面的代码,编译后会报如下警告:
Expression implicitly coerced from ‘Int?’ to ‘Any’
Provide a default value to avoid this warning
Force-unwrap the value to avoid this warning
Explicitly cast to ‘Any’ with ‘as Any’ to silence this warning

原因是编译器不知道result这个值到底是什么,因为它是一个可选类型。

系统给提供了三个处理警告的办法,点击fix即可

  1. 添加一个默认值
let result: Int? = 10
print(result ?? 0)

如果有值则是该值,如果没值,result是0。

  1. unwrap解包装
let result: Int? = 10
print(result!)

这种情况需要注意,当result被赋值为nil的时候,会闪退。

这里有一个问题就是 感叹号 在这里的作用。

let result: Int? = 10
print(result as Any)

这种做法个人感觉是比较好的,当result有值时就是被赋予的值,如果没值时候就是nil,也不会闪退。

Optional中使用nil

var serverResponseCode: Int? = 404

// serverResponseCode contains an actual Int value of 404

serverResponseCode = nil

// serverResponseCode now contains no value

注意:
Swift中的nil与OC中的nil不一样。OC中nil是指向不存在的对象的指针。在Swift中nil不是指针,是缺少某种类型的值,可以将任何类型的Optionals这是为nil,而不仅仅是对象类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值