原創文章,歡迎轉載。轉載請註明:關東昇的博客 php
擴展類型的時候,也能夠添加新的構造函數。值類型與引用類型擴展有所區別。值類型包括了除類之外的其餘類型,主要是枚舉類型和結構體類型。 java
值類型擴展構造函數微信
擴展結構體類型中定義構造函數的示例:函數
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是調用了原始類型的兩個參數的構造函數。 網站
引用類型擴展構造函數 spa
擴展類中定義構造函數的示例:.net
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_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php代理