Swift_符號表達式(【Int? = optional Int】、【as\as!\as?】、nil 代表值爲nil非空、?可以選鏈..... )

func symbolAp(){
    
        //Int? 相當於 optional int 可選類型
        //一般用於類型轉換可能會失敗,例如 字符串 sss  轉 int
        let sym:Int? = 1
        let sym2:Float? = Float("11.3")  //sym2 = 11.3
        let sym3:Float? = Float("as.v")  // sym3 = nil

        
        if sym2 != nil {   //sym2的值爲 nil ,而不是Object-C 的空指針
            print("sym2 = \((String(format:"%.2f",sym2!))) \n")
        }
        
        if sym3 == nil {
            print("sym3 = nil,轉換失敗\n")
        }
        
        
        //as as! as?
        /*as  類型轉換 從派生類轉換爲基類,向上轉型(upcasts)*/
        let asNum = 10 as Int
        var asNum2 = 19.11 as Float
        var asNum3 = 19.11 as Float

        /*as! 強轉    向下轉型(Downcasting)時使用。由於是強制類型轉換,如果轉換失敗會報 runtime 運行錯誤*/
        let asNum4 = "19.11" as! Float  //報錯


        
        /*as? as? 和 as! 操作符的轉換規則完全一樣。但 as? 如果轉換不成功的時候便會返回一個 nil 對象。成功的話返回可選類型值 /(optional),需要我們拆包使用。
              由於 as? 在轉換失敗的時候也不會出現錯誤,所以對於如果能確保100%會成功的轉換則可使用 as!,否則使用 as?*/
        let asNum6 = "19.11" as? Int   //因爲非強轉,所以失敗返回nil值

        
    }

?可選鏈

class Apple {

    var num:Int = 3
}


class Fruit {
    
    var apple:Apple?
    
}
//?可以選鏈
    /*
     如果你訪問的值不是可選的,可選鏈式調用將會返回可選值。
     如果你訪問的值就是可選的,可選鏈式調用不會讓可選返回值變得“更可選”。
     因此:
     
     通過可選鏈式調用訪問一個Int值,將會返回Int?,無論使用了多少層可選鏈式調用。
     類似的,通過可選鏈式調用訪問Int?值,依舊會返回Int?值,並不會返回Int??。
     */
    func canType (){
        
        var fruit = Fruit()
        let t = fruit.apple?.num //?可選,允許返回nil值
//        let b = fruit.apple!.num //!強制打開,如果nil 運行時報錯 fatal error: unexpectedly found nil while unwrapping an Optional value

        //實例 賦值
        fruit.apple = Apple()
        let c = fruit.apple!.num //c=3 這樣實例後 強行打開也不會報錯
        
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章