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

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

Swift可選類型和可選鏈-創(chuàng)新互聯(lián)

一、可選類型

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、昭化網(wǎng)站維護(hù)、網(wǎng)站推廣。

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

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

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

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

        如果Employee?沒(méi)有賦值,調(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è)感嘆號(hào)(!)來(lái)獲取該值,這種感嘆號(hào)的表達(dá)方式稱為可選類型的強(qiáng)制拆封,如下代碼所示:

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

        println(result1!)

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

        前問(wèn)號(hào),后感嘆號(hào),強(qiáng)制拆封

    (2)隱式拆封

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

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

                 println(result3)

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

            前感嘆后省略,隱式拆封

     (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語(yǔ)句的邏輯變大時(shí)為true, 這種可選類型在if 或while語(yǔ)句中進(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í)例,通過(guò)代碼emp.dept.com.name 可以引用到Company實(shí)例,形成一個(gè)引用的鏈條,但是這個(gè)鏈條的人一個(gè)環(huán)節(jié)斷裂,都無(wú)法引用到最后的目標(biāo)。

        修改代碼如下:

        2、Employee、Department,Company可以沒(méi)有對(duì)應(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,將會(huì)導(dǎo)致代碼運(yùn)行時(shí)錯(cuò)誤,可以采用更加溫柔的引用方式,使用問(wèn)號(hào)?來(lái)代替感嘆號(hào)!,如下所示:

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

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

三、使用問(wèn)號(hào)?和感嘆號(hào)!的總結(jié)

        1、可選類型中的問(wèn)號(hào)?

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

        2、可選類型中的感嘆號(hào)!

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

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

             println(result3)

         3、可選類型中的感嘆號(hào)

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

            emp.dept!.com!.name

            4、可選鏈中的問(wèn)號(hào)

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

            emp.dept?.com?.name

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)頁(yè)標(biāo)題:Swift可選類型和可選鏈-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://weahome.cn/article/csesch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部