Swift中?和!的区别

    xiaoxiao2021-12-14  17

    原文:http://blog.csdn.net/hnuzengchao/article/details/50059887

    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提示功能也很不错,这里赞一个。总之,一定要谨慎。

    转载请注明原文地址: https://ju.6miu.com/read-965655.html

    最新回复(0)