中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swift2.0(15)類型的補充

發布時間:2020-04-13 22:22:50 來源:網絡 閱讀:364 作者:ymanmeng123 欄目:移動開發
  • 可選鏈

之前介紹過可選類型,再來深化一下可選鏈的概念

     如下面的代碼,包含的符合關系:人—>寵物—>玩具

    class Person {
       
var pet:Pet?
    }
   
class Pet {
       
var name:String
       
var favorityToy:Toy?
       
init(name:String) {
           
self.name = name

        }

        func playToy() {
            print("Pet \(self.name) play toy")

        }

    }
   
class Toy {
       
var name:String
       
init(name:String) {
           
self.name = name
        }

    }

     Person的pet屬性可以為nil,Pet的屬性favorityToy可以為nil,這是有現實意義的

    let p1 = Person()

    print(p1.pet!.name)     

     由于p1.pet并沒有初始化,故為nil,在執行p1.pet!解封時,程序將崩潰(crash)

     可選鏈的格式:串聯要訪問的屬性且在每個可選屬性后增加?

    print(p1.pet?.favorityToy?.name)     //nil

可選鏈的常見應用場景:

     a. 可選鏈訪問屬性,如上面的代碼

     b. 可選鏈訪問方法,如:

           p1.pet?.playToy()

     ...


  • 類型的轉換

先看三個類:

    class Animal {
       
var age:Int = 1
    }
   
class Dog : Animal {
       
var dogName:String?
    }
   
class Cat : Animal {
       
var catName:String?

    }

is 關鍵字 用于進行類型檢查,如:

    var p:Animal = Dog()

    if p is Dog {
       
print("")
    }
   
else {
       
print("不是")

    }

as 用于繼承關系中的向上轉型

     子類實例引用賦值給父類實例引用;其實直接賦值也是允許的

     var d1:Dog = Dog()

     var a1:Animal = d1 as Animal

as!/as? 用于繼承關系中的向下轉型

     父類實例引用(引用的父類實例也可能引用子類實例)賦值給子類實例引用

     as! 用于轉換一定成功的情況(進行了強解封),返回的不是可選類型

     as? 用于轉換不一定成功的情況,返回的是可選類型

     如:

     var a1:Animal = Dog()

     var d1:Dog? =  a1 as? Dog

     print(d1)     //Optional(xxxx.Dog)

     if let d2:Dog = a1 as? Dog {

         print(d2) //xxxx.Dog

     }

AnyObject:表示任意class類型的實例

    var a:[AnyObject] = [10, 3.14 ,"hello"]

    for var item in a {
       
if let a:Int = item as? Int {
           
print("整數:\(a)")
        }
       
else if let a:Double = item as? Double {
           
print("浮點:\(a)")
        }
       
else if let a:String = item as? String {
           
print("字符串:\(a)")
        }

    }

Any:表示任意類型,除了方法類型(函數類型)

    var a = [Any]()

    a.append(10)
   
a.append(3.14)

    a.append("hello")

    for var item in a {
       
if let a:Int = item as? Int {
           
print("整數:\(a)")
        }
       
else if let a:Double = item as? Double {
           
print("浮點:\(a)")
        }
       
else if let a:String = item as? String {
           
print("字符串:\(a)")
        }

    }


  • 類型的嵌套

Swift允許在結構體、枚舉、類類型中嵌套定義結構體、枚舉、類類型

這樣做的好處是:方便組織代碼、一定程度上起到了命名空間的作用

     如:

    class A  {
       
var name:String?
       
class C {
           
var name:String?
           
var age:Int?
        }
    }
   
class B {
       
var name:String?
       
class C {
           
var height:Double?
        }

    }

    var p1:A.C = A.C()

    var p2:B.C = B.C()

     被嵌套的類,使用這種 . 方式表示


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延边| 宁化县| 龙门县| 红河县| 武威市| 姚安县| 嘉禾县| 姜堰市| 勐海县| 平遥县| 青神县| 读书| 仙居县| 澳门| 皋兰县| 凭祥市| 天祝| 云阳县| 海晏县| 沁水县| 南平市| 余姚市| 穆棱市| 高唐县| 苍南县| 延吉市| 双辽市| 卢龙县| 平昌县| 灌云县| 武威市| 连云港市| 多伦县| 湟源县| 宝清县| 山丹县| 榆树市| 鄯善县| 长治市| 宜丰县| 仪陇县|