《從零開始學Swift》學習筆記(Day 51)——擴充套件建構函式

智捷關東昇發表於2016-03-25

原創文章,歡迎轉載。轉載請註明:關東昇的部落格

  擴充套件型別的時候,也可以新增新的建構函式。值型別與引用型別擴充套件有所區別。值型別包括了除類以外的其他型別,主要是列舉型別和結構體型別。

值型別擴充套件建構函式   
  擴充套件結構體型別中定義建構函式的示例:

struct Rectangle {            

    var width : Double
    var height : Double

    init(width : Double, height : Double) {
    self.width   = width
    self.height  = height
    }

}
extension Rectangle {        //定義了Rectangle的擴充套件型別
    init(length : Double) {    
    self.init(width : length, height : length)    
    }
}

var rect = Rectangle(width : 320.0, height : 480.0)    //呼叫兩個引數的建構函式,這個建構函式是原始型別提供, Rectangle型別已經是擴充套件型別
print("長方形:\(rect.width) x \(rect.height)")

var square = Rectangle(length: 500.0)    //呼叫一個引數的建構函式,這個建構函式是擴充套件型別提供的

print("正方形:(square.width) x (square.height)")

  self.init是呼叫了原始型別的兩個引數的建構函式。

引用型別擴充套件建構函式
  擴充套件類中定義建構函式的示例:

 class Person {                
    var name : String
    var age : Int
    func description() -> String {
    return "\(name) 年齡是: \(age)"
    }
    init (name : String, age : Int) {    
    self.name = name
    self.age  = age
    }
}

extension Person {            //定義Person類的擴充套件型別
    convenience init (name : String) {    //便利建構函式
    self.init(name : name, age : 8)     
    }
}

let p1 = Person(name : "Mary")    //呼叫兩個引數的建構函式,這個建構函式是原始型別提供,這時候的Person型別已經是擴充套件型別。
print("Person1 : \(p1.description())")
let p2 = Person(name : "Tony", age : 28)// 呼叫一個引數的建構函式建立Person例項,這個建構函式是擴充套件型別提供的。
print("Person2 : \(p2.description())")

程式碼self.init(name : name, age : 8)呼叫指定建構函式代理部分構造任務。

歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊

enter image description here

更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php

相關文章