Swift的可选项问题

/*

 1. 定义常量用 let;定义变量用 var

 2. 定义的非可选项的常量/变量,在使用前必须进行初始化,否则使用的时候会报错

 3. 定义可选项的常量/变量,变量默认初始化为nil,常量没有默认初始化,需要自己进行初始化

 4. 定义可选项用 ‘?’ 如:let x: Int?   解包用 ‘!’,只有准备计算的时候才进行 解包

 5. 程序员必须为每一个 ‘!’ 进行负责,在实际开发中,尽量少使用 ’!‘,主要是因为可能会出现强行解包失败

 */

 

class ViewController: UIViewController

{

    override func viewDidLoad()

    {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

        demo()

    }

    

    func demo1() -> ()

    {

        

        var a: Int

        print(a) // 因为没有初始化,会报错

        

        let b: Int

        print(b) // 因为没有初始化,会报错

        

        // 1> 定义y没有初始化

        let y: Int?

        // 2> 给常量设置数值,初始化的工作职能做一次

        y = 20

        // 如果再赋值一次就会报错

//        y = 40 

        print(y)

        

        // var定义的变量的可选项默认值是nil

        // let定义的常量的可选项没有默认值

        var x: Int?

        print(x)

    }

    

    // 可选项有两个值,一个是 nil 另一个是指定值。如 x: int?x有两个值,一个是nil,一个是指定的整数

    

    // 最常见的错误

    // unexpectedly found nil while unwrapping an Optional value

    // 在解包的时候发现了 nil 值

    

    /**

     定义可选项用 ‘?’

     解包用 ‘!’,准备计算

    */

    

    func demo()

    {

        // 1. 原始的可选项定义

        // none 没有值,或者some 某一类值

        let x: Optional = 10

        

        // 输出结果 optional(10),提示这是一个可选项

        print(x as Any)

        

        // 2. 简单地定义

        // ‘?’用来定义 y 是一个可选的Int类型,可能没有值,也可能有一个整数

        let y: Int? = 20

        

        print(y as Any)

        

        // 1> 不同类型之间的值不能直接运算,如果没有值是nil 不是任何数据类型,不能参与计算

        // 2> ‘!’ 强行解包 - 从可选值中强行获取对应的非空值

        print(x! + y!)

        

        let z: Int? = 2// nil

        print(z as Any)

        // fatal error: unexpectedly found nil while unwrapping an Optional value

        // 程序员必须为每一个 ! 负责

        

        // 程序中要少用 ‘!’

        print(x! + y! + z!)

        

    }

}

posted on 2017-07-06 09:22  TangBin604  阅读(107)  评论(0编辑  收藏  举报

导航