美文网首页
Swift学习之?和!

Swift学习之?和!

作者: canlanrensheng | 来源:发表于2018-09-21 09:25 被阅读0次

在声明一个变量时,如果不手动初始化,Swift不会自动初始化该变量为一个默认值的。

在OC语言中,创建一个字符串,如果没有对其进行初始化的时候,为了防止野指针,我们会这样做:

NSString *string = nil;

将字符串置为nil,但是在swift语言中的做法是:

var str :String?

就是告诉编译器这是一个Optional的变量,如果没有初始化,你就将其初始化为nil

而通过!声明,则之后对该变量操作的时候都会隐式的在操作前添加一个!。

var arrayCount = array?.count

这时问号的意思类似于isResponseToSelector,即如果变量是nil,则不能响应后面的方法,所以会直接返回nil。如果变量非nil,就会拆Some(T)的包,取出原始值执行后面的操作。

var arrayCount = array!.count

这里的叹号和之前的问号则不同,这里表示我确定array一定是非nil的,所以直接拆包取出原始值进行处理。因此此处如果不小心让array为nil,程序就会crash掉。

总结

问号?

1.声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil

2.在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法。

叹号!

1.声明时添加!,告诉编译器这个是Optional的,并且之后对该变量操作的时候,都隐式的在操作前添加!

2.在对变量操作前添加!,表示默认为非nil,直接解包进行处理

相关文章

网友评论

      本文标题:Swift学习之?和!

      本文链接:https://www.haomeiwen.com/subject/vednnftx.html