加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift中?和!的区别

发布时间:2020-12-14 06:35:11 所属栏目:百科 来源:网络整理
导读:原文:http://www.jb51.cc/article/p-qgioyhvp-bec.html 1.常量和变量 Swift语言中是用let来定义常量,并且要初始化。var来定义变量,在let或者var后面申明类型,冒号+空格,然后再加上类型名称。 2.optional(可选)变量 可选变量用于处理值缺失的情况,有点

原文:http://www.52php.cn/article/p-qgioyhvp-bec.html

1.常量和变量

Swift语言中是用let来定义常量,并且要初始化。var来定义变量,在let或者var后面申明类型,冒号+空格,然后再加上类型名称。


2.optional(可选)变量

可选变量用于处理值缺失的情况,有点类似于OC中的nil,可以用于任何类型上,不仅仅是类,不过更加安全。Swift是类型安全的一门语言,可以很少申明类型。

附:Swift和Objective-C中nil的区别

1)OC中,nil是一个指向不存在对象的指针;

2)Swift中,nil不是指针,它是一个确定的值,用于表示值缺失。任何类型的可选状态都可以设置为nil,不只是对象类型;


3.深入了解Optional变量

Optional其实就是一个enum,里面有None和Some类型。nil就是Optional.None,非nil就是Optional.Some,通过Some(T)包装原始值,所以在是用Optional的时候要进行拆包。

声明一个可选类型的时候要在类型后面加上? 如:var str : String?

var strValue: String?

意思不是“我声明了一个Optional的String值”,而是我声明了一个Optional类型值。


对一个可选类型的值,需要进行拆包才不会报错。

拆包有两种方式,如下:

1)Optional Binding

如: if let str = strValue {

let hashValue = str.hashValue

}

2)通过! str!


对于会在viewDidLoad进行初始化的变量,可以直接定义为var str :String!叫做Implicitly Unwrapped Optionals,称为隐式拆包,在进行操作的时候也需要添加!进行拆包。


?的使用场景:

1)声明Optional值变量

2)在对Optional值操作中,用来判断是否能响应后面的操作


!的使用场景:

1)强制对Optional值进行拆包

2)声明隐式拆包变量,一般用于类中的属性


如果你在隐式解析可选类型没有值的时候进行取值,会crash。和在没有值的可选类型里面拆包是一样的。


4.总结

可选类型在swift里面十分重要,在做项目的过程,要尤为重视可选变量,不然应用跑起来老是crash,并且debug也不方便找出错误来,不过Xcode提示功能也很不错,这里赞一个。总之,一定要谨慎。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读