真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Swift可選類型和可選鏈

一、可選類型

創(chuàng)新互聯(lián)建站技術(shù)團(tuán)隊(duì)十余年來致力于為客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè)、高端網(wǎng)站設(shè)計(jì)、成都營銷網(wǎng)站建設(shè)、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了1000+網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。

    有時(shí)候在Swift程序的表達(dá)式可以看到?和!等符號,它們代表的含義是什么,這些符號都和可選類型有關(guān)。

    有時(shí)候使用一個(gè)變量和常量,它保存的值可能有也可能沒有

    1、比較給一個(gè)變量賦值nil,需要下面的表達(dá)式賦值

    class Empoyee{
        var  int : = 0
        var name:String = ""
        var job : String =""
}
    var emp : Employee? = nil //后面加上?號可以接受空值,不加?不能賦予空值
    emp1=Employee()
    println(emp!.no)

        如果Employee?沒有賦值,調(diào)用它的成員的時(shí)候可能出現(xiàn)fatal error:unexpected found nil while upwrapping an optional value.

    2、引用代碼

        emp1?.no=1000
        emp1?.name="張三"
        emp1?.job="clerk"

    3、再看示例

        func divided(n1:Int,n2:Int)->Double?{
            if n2==0{
            return nil
}
        Double(n1)/Double(n2)
}
    let result : Double? = divide(100,200)

    使用原則:如果一個(gè)常量、變量或函數(shù)能夠接受nil空值,那就需要給這個(gè)類型設(shè)為可選類型(正常類型+?),允許接受nil控制則是正常類型

    (1)強(qiáng)制拆封

        如果我們能確定可選類型一定有值,那么在讀取它的時(shí)候,可以在可選類型的后面加一個(gè)感嘆號(!)來獲取該值,這種感嘆號的表達(dá)方式稱為可選類型的強(qiáng)制拆封,如下代碼所示:

        let result1 :Double? = divided(10,20)

        println(result1!)

        println對result1中的語句進(jìn)行了強(qiáng)制拆封

        

        前問號,后感嘆號,強(qiáng)制拆封

    (2)隱式拆封

            

            為了能夠方便的訪問可選類型,可以將可選類型后面的問號改成感嘆號(!),這種可選類型在拆封時(shí)變量和常量不加感嘆號的方式稱為隱式拆封,如下代碼所示:

                let result3 : Double! = divided(10,20)

                 println(result3)

        在變量或常量聲明的時(shí)候,數(shù)據(jù)類型后面跟的是感嘆號而不是問號,在拆封的時(shí)候,變量或常量后面不用加感嘆號,這就是隱式拆封,隱式拆封的變量或常量使用起來就像普通變量或常量一樣

            前感嘆后省略,隱式拆封

      (3)可選類型的綁定

            可選類型賦值有風(fēng)險(xiǎn)性,可以先判斷再賦值,如下代碼所示:

        func divided(n1:Int,n2:Int)->Double?{
            if n2==0{
            return nil
}
        Double(n1)/Double(n2)
}

    if let result : Double = divided(10,20) {
    let sum = 10.2 + result
    
    println(sum)
    
}

          調(diào)用函數(shù)進(jìn)行計(jì)算,然后把結(jié)果直接賦值給變量或常量,如果result不為nil,則if語句的邏輯變大時(shí)為true, 這種可選類型在if 或while語句中進(jìn)行判斷賦值,叫做可選綁定。      

二、可選鏈

      class Empoyee {
            var no:Int = 0
            var name : String = "tony"
            var job:String? = ""
            var salary:Double = 0
            var dept : Deartment = Department()
}
            class Department {
            var no : Int = 0
            var name:String = "sales"
            var com:Company = Company()
}
            class Company {
                var no : Int = 0
                var name : String = ""
}
        var emp = Employee()
        println(emp.dept.com.name)

        給定一個(gè)Employee實(shí)例,通過代碼emp.dept.com.name 可以引用到Company實(shí)例,形成一個(gè)引用的鏈條,但是這個(gè)鏈條的人一個(gè)環(huán)節(jié)斷裂,都無法引用到最后的目標(biāo)。

        修改代碼如下:

            

        2、Employee、Department,Company可以沒有對應(yīng)關(guān)系

      class Empoyee {
            var no:Int = 0
            var name : String = "tony"
            var job:String? = ""
            var salary:Double = 0
            var dept : Deartment? = Department()
}
            class Department {
            var no : Int = 0
            var name:String = "sales"
            var com:Company? = Company()
}
            class Company {
                var no : Int = 0
                var name : String = ""
}
        var emp = Employee()
        println(emp.dept!.com!.name)

        但是強(qiáng)制拆封有一個(gè)弊端,如果可選鏈中某個(gè)環(huán)節(jié)為nil,將會導(dǎo)致代碼運(yùn)行時(shí)錯(cuò)誤,可以采用更加溫柔的引用方式,使用問號?來代替感嘆號!,如下所示:

            

        println(emp.dept?.com?.name)

            ?問號表示引用的時(shí)候,如果某個(gè)環(huán)節(jié)為nil,她不會出現(xiàn)錯(cuò)誤,而是把nil返回給引用者,這種使用問號引用可選類型的方式叫做可選鏈

三、使用問號?和感嘆號!的總結(jié)

        1、可選類型中的問號?

            聲明這個(gè)類型為可選類型,訪問這種類型的常量或變量時(shí)要使用感嘆號!

        2、可選類型中的感嘆號!

            聲明這個(gè)類型也是可選類型,但是訪問這種類型的常量或變量時(shí)不適用感嘆號!,下列代碼是隱式拆封:

            let result3 : Double! = divide(10,20)

             println(result3)

          3、可選類型中的感嘆號

            多個(gè)對象具有關(guān)聯(lián)關(guān)系,當(dāng)從一個(gè)對象引用另一個(gè)對象的方法、屬性和下標(biāo)的成員時(shí),就會形成引用鏈,由于這個(gè)鏈條某些環(huán)節(jié)可能有錢,有些可能沒值,因此需要如下方法引用:

            emp.dept!.com!.name

            4、可選鏈中的問號

            在可選鏈中使用感嘆號訪問時(shí),一旦鏈條某些環(huán)節(jié)沒值,程序?qū)l(fā)生異常,于是可把感嘆號改成問號,如下所示:

            emp.dept?.com?.name

              這樣某些環(huán)節(jié)沒值會返回nil,不會出現(xiàn)異常          

  


分享文章:Swift可選類型和可選鏈
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/ijojis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部