swift可选项(optional)的使用

前言、Objective-C与Swift语言对于可选nil的不同理解:
  • Objective-C中的nil: 表示缺少一个合法的对象,是指向不存在对象的指针,对结构体、枚举等类型不起作用(会返回NSNotFound)。
  • Swift中的nil: 表示任意类型的值缺失,是一个确定的值,要么是该类型的一个值要么什么都没有(即为nil)。
一、可选项的创建

1、声明可选String类型的变量,初始值为nil

var str2: String? = nil

2、声明可选String类型的变量,初始值为"你好呀"

var str3: String? = "你好呀"
var str: String = nil   //此时代码报错

注意

非可选型不可以设置为nil,否则会报错

二、解包可选项的值

1、使用使用if进行展开,获取可选项的值

//声明可选String类型的变量,初始值为"你好呀"
var str3: String? = "你好呀"
//需要使用if进行展开
if str3 != nil {
    let count = str3!.count  //使用"!"解包 str3 的值
    print(count)
}

2、使用可选绑定获取可选类型的值(建议使用)

if let tempStr = str3 {  //如果str3有值获取类型转换成功,则将值赋值给tempStr直接使用
    print("tempStr is \(tempStr)")  //使用tempStr代替str3,切不需要加!强制解析
} else {
    print("str3 is nil")
}

3、隐式解析可选类型,使用!(用于申明是肯定有初始值,但后面可能为nil)

var mobileNumber: Int64! = 187734098765  //第一次申明有初始值
var mobileNumber2: Int64! = nil  //这样也不会报错
print("您的电话号码是:\(String(describing: mobileNumber))")  //打印内容是:您的电话号码是:Optional(187734098765)
//还是不建议直接强制解析,因为实际项目中可能中间已经对该值做了改变,若为nil则会运行错误导致APP崩溃

建议的做法:还是使用可选绑定获取可选类型的值

if let number = mobileNumber {
    print("你的电话号码是:\(number)")  //此时打印:你的电话号码是:187734098765
} else {
    print("你的电话号码为空号")
}

4、可选项链,在可选项后面加?还是可选项,如果可选项不为nil,则返回一个可选项结果,否则返回nil

var str4: String? = "abc"
let count2 = str4?.count  //在可选项的后面加?
if count2 != nil {  //使用 if 展开
    print("count2 is \(count2! - 1)") //使用!展开count2的数据
}

5、optional的底层就是一个public的枚举,而且是泛型的类型。他有两个属性,一个是none,也就是nil;一个是some,代表可选类型的值

//可以将之前的 ? 改成 optional,效果是一样的
//声明可选 String 类型的变量,初始值为"abc"
var str5: Optional<String> = "abc"
if let str6 = str5 {  //使用可选绑定获取可选类型的值
    print("str6 is \(str6)")
}

6、因为他是一个泛型(unsafelyUnwrapped),所以展开也可以使用 unsafelyUnwrapped 去替代 ! ,效果也是一样的

var str7: String? = "abc"
if str7 != nil {
    print("str7 is \(str7.unsafelyUnwrapped)")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值