99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Swift類的兩段式構(gòu)造詳解

發(fā)布時間:2017-01-20 22:31  回復(fù):0  查看:3320   最后回復(fù):2017-01-20 22:31  

本文和大家分享的主要是swift類的兩段式構(gòu)造相關(guān)內(nèi)容,一起來看看吧,希望對大家學(xué)習(xí)swift有所幫助。

  兩段式構(gòu)造

  第一階段:

  1. 程序調(diào)用子類的某個構(gòu)造器

  2. 為實例分配內(nèi)存此時實例的內(nèi)存還沒有被初始化

  3. 指定構(gòu)造器確保子類定義的所有實例存儲屬性都已被賦初值

  4. 指定構(gòu)造器將調(diào)用父類的構(gòu)造器完成父類定義的實例存儲屬性的初始化

  5. 沿著調(diào)用父類構(gòu)造器的構(gòu)造器鏈一直往上執(zhí)行直到到達(dá)構(gòu)造器鏈的最頂部

  第二階段:

  1. 沿著繼承樹往下構(gòu)造器此時可以修改實例屬性和訪問self, 甚至可以調(diào)用實例方法

  2.

  最后構(gòu)造器鏈中的便利構(gòu)造器都有機會定制實例和使用self

  3.

  為了使得構(gòu)造過程更加安全, Swift進(jìn)行了安全檢查

  4.

  安全檢查

  · 安全檢查 1:指定構(gòu)造器必須先初始化當(dāng)前類中定義的實例存儲屬性然后才能向上調(diào)用父類構(gòu)造器

  · 安全檢查 2:指定構(gòu)造器必須向上調(diào)用父類構(gòu)造器然后才能對繼承得到的屬性賦值

  · 安全檢查 3:便利構(gòu)造器必須先調(diào)用同一個類的其他構(gòu)造器然后才能對屬性賦值

  · 安全檢查 4:構(gòu)造器在第一階段完成之前不能調(diào)用實例方法不能讀取實例屬性

  class Person {

  var height: Double

  var weight: Double

  // 定義指定構(gòu)造器

  init(height: Double, weight: Double) {

  self.height = height

  self.weight = weight

  }

  // 定義便利構(gòu)造器(使用convenience修飾)

  convenience init(h height: Double, w weight: Double) {

  self.init(height: height, weight: weight)

  }

  }

  class ManPerson {

  var sex: String!

  init(sex: String, height: Double, weight: Double) {

  // print(super.height) 不能再父類初始化之前調(diào)用父類中的屬性

  super.init(height: height, weight: weight)

  super.height = 178

  print(self.height)

  // print(self.sex) 不能在本類中的屬性沒有進(jìn)行初始化的時候進(jìn)行調(diào)用

  // 會出現(xiàn):fatal error: unexpectedly found nil while unwrapping an Optional value錯誤

  self.sex = sex

  print(self.sex)

  }

  convenience init(s sex: String, h height: Double, weight: Double) {

  // 在調(diào)用其他構(gòu)造器之前不能訪問或修改任何實例存儲屬性

  // print(self.height) 錯誤

  // super.height = height 錯誤

  self.init(sex: sex, height: height, weight: weight)

  }

  }

  var man = Man(sex: "", height: 178, weight: 62.0)

 

來源:Cmb Blog

您還未登錄,請先登錄

熱門帖子

最新帖子

?