0
点赞
收藏
分享

微信扫一扫

013_swift_问号?和感叹号! Optional


为什么需要 Optional

013_swift_问号?和感叹号!  Optional_可选链

什么是 Optional

变量类型后面添加?表示

这里有一个值=  x  或者 这里根本没有数值

013_swift_问号?和感叹号!  Optional_感叹号_02

Optional-if 语句 以及强制展开

可选项是没法直接使用的

需要用!展开之后才能使用。意思是确定步不为 nil

强制展开

 

013_swift_问号?和感叹号!  Optional_可选链_03

 绑定

013_swift_问号?和感叹号!  Optional_if语句_04

隐士展开

013_swift_问号?和感叹号!  Optional_感叹号_05

 可选链

  可选项后面加?

如果可选项不为 nil 返回一个可选项结结果,否则返回 nil

013_swift_问号?和感叹号!  Optional_可选链_06

源码探究

var str2:Optional<String>="abc"
if(str2 != nil){
let count = str2.unsafelyUnwrapped.count
print(count)
}

可以点进去看 Optional的源码  你会发现这并不是 swift 的新特性 而是使用了枚举

 

//声明为可空 nil 其实是声明为Any类型
var password2: String?
dump(password2)
//下面 第一个?声明一个Optional变量 第二个?在堆Optional值操作时,判断是否可以相应后面的操作
var password:String?
print(password?.count)
//
//双??号 前面的值为空的时候 使用后面的值
var password3: String?
print(password3?.count ?? 0)
//下面的!就是拆包的意思 把Optional拆分成原始值
var password4:String?
password="1234556"
print(password4!.count)
//会被可选包裹
print(password4?.count)
// 双问好代表前面为空的时候使用后面数值来充当默认值
print(password4?.count ?? 0)

//传统的空值判断,通常要使用if语句 代码量比较大,而使用问好和感叹号,则可以很简洁的进行空值判断。下面就是一个空值判断的实例
class Pet{
var name: String?
}
class Person{
var name : String?
var pet : Pet?
}
let person=Person()
person.pet
//如果person.pet 为空就直接返回空。不再尝试获取.name属性
person.pet?.name
person.pet=Pet()
person.pet
person.pet?.name

person.pet?.name="Brid"
person.pet?.name

 

举报

相关推荐

0 条评论