美文网首页
Swift可选类型

Swift可选类型

作者: iOS_July | 来源:发表于2019-03-13 10:44 被阅读0次

一、可选类型的介绍

  • 在OC开发中,如果一个变量暂时不使用,可以赋值为0[基本属性类型],或者赋值为空[对象类型]

  • 在Swift中,nil 是一个特殊的类型,因为和真实的类型不匹配是不能赋值的[Swift是强类型语言]

  • 但是开发中难免会赋值nil,因此推出了可选类型

  • 可选类型取值:空值 & 有值

二、定义可选类型

  • 方法一:基本写法
var name : Optional<String> = nil
  • 方法二:语法糖[常用]
var name2 : String? = nil

三、给可选类型赋值

name = Optional("July")

四、代码理解

 //MARK: 可选项
    //最常见错误 Unexpectedly found nil while unwrapping an Optional value
    //在解包过程中,发现了 nil 值
    /**
     定义 可选项使用 ?
     解包          !
     */
    func optionalMethod() -> () {
        //1.原始定义
        //none 没有值 |  some 某一类值
        let x : Optional = 10
        
        
        //2.简单定义
        //'?' 用来定义 y 是一个可选的 Int 类型,可能没有值,也可能有一个整数
        let y : Int? = 20
        
        //输出Optional(10) Optional(20),提示是一个可选值
        print(x)
        print(y)
        
        //print(x + y) 不同类型之间的值不能直接运算,如果没有值是 nil,不是任何数据类型,所以不能参与计算
        //"!" 强行解包  从可选值中强行获取对应的非空值
        //程序中要少使用 "!"
        print(x! + y!)
    }
func optionalMethod1() -> () {
        
        //定义y,但并没有初始化
        let y : Int?
        
        //给常量设置数值,初始化工作只能做一次
        y = 20
        
        
        // *** var的可选值默认为 nil
        // *** let 没有默认可选值
        
    }

五、 可选项判断

  • if
// opationalJudge(x : 10, y : nil)
    //MARK: 可选项 判断
    func opationalJudge(x : Int?, y : Int?) -> () {
        
        //强行解包有风险
        //print(x! + y!)
        
        //可以使用 if 来判断,但是判断条件多了 代码看起来就会很丑陋
    }
  • ??
    //??
    func opationalJudge1(x : Int?, y : Int?) -> () {
        /**
         ?? 是一个简单的三目
         如果有值,使用值
         如果没有值,使用 ?? 后面的值代替
         ?? 的优先级低,在使用的时候最好加上 ()
         */
        print((x ?? 0) + (y ?? 0))
    }
  • if let 连用
    // if let 连用,判断对象的值是否为 nil ,进入之后,ox 和 oy 一定有值,不需要解包
    // if var 连用,{} 可以对值进行改变
    func opationalJudge2() -> () {
        
        let oA: String? = "DD"
        let oB: Int? = 10
        if let a = oA,let b = oB {
            
            //进入之后,a 和 b 一定有值,不需要解包
            print(a + String(b))
        }
        
    }
  • guard
    // guard 和 if let / if var 刚好相反
    func opationalJudge3() -> () {
        
        let oA: String? = "DD"
        let oB: Int? = 10
        
        //guard let 守护一定有值,如没有就返回
        guard let a = oA,let b = oB else {
            print("有值为nil")
            return
        }
        //来到这里之后,a 和 b 一定有值,不需要解包
        print(a + String(b))
        
        
    }

相关文章

网友评论

      本文标题:Swift可选类型

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