『ゼロから学ぶSwift』学習ノート(Day 39)——コンストラクション関数リロード

4206 ワード

オリジナルの文章、転載を歓迎します.転載は明記してください:関東昇のブログ
 
コンストラクション関数は特殊な方法として、リロードすることもできます.
Swiftのコンストラクション関数は複数あり、パラメータリストと戻り値は異なり、これらのコンストラクション関数はリロードを構成します.
サンプルコードは次のとおりです.
class Rectangle {

    

    var width: Double

    var height: Double

    

    init(width: Double, height: Double) {

        self.width   = width

        self.height  = height

    }

    

    init(W width: Double,H height: Double) {  

        self.width   = width

        self.height  = height

    }

    

    init(length: Double) {    

        self.width   = length

        self.height  = length

    }

 

    init() {   

        self.width   = 640.0

        self.height  = 940.0

    }

 

}

 

var rectc1 = Rectangle(width: 320.0, height: 480.0)  

print(" :\(rectc1.width) x \(rectc1.height)")

 

var rectc2 = Rectangle(W: 320.0, H: 480.0)           

print(" :\(rectc2.width) x \(rectc2.height)")

 

var rectc3 = Rectangle(length: 500.0)                

print(" 3:\(rectc3.width) x \(rectc3.height)")

 

var rectc4 = Rectangle()                         

print(" 4:\(rectc4.width) x \(rectc4.height)")

 
コンストラクタエージェント
複数のコンストラクション関数間のコード重複を減らすために、コンストラクション関数を定義する際に、コンストラクション関数エージェントと呼ばれる他のコンストラクション関数を呼び出すことで、インスタンスの一部のコンストラクションプロセスを完了できます.コンストラクション関数エージェントは、構造体とクラスで使用方法が異なります.まず、構造体のコンストラクション関数エージェントについて説明します.
前のセクションの例を次のように変更します.
struct Rectangle {

 

    var width: Double

    var height: Double

    

    init(width: Double, height: Double) {

        self.width   = width

        self.height  = height

    }

    

    init(W width: Double,H height: Double) {  

        self.width   = width

        self.height  = height

    }

    

    init(length: Double) {                    // self.init 

        self.init(W: length, H: length)

    }

 

    init() {                              // self.init 

        self.init(width: 640.0, height: 940.0)

    }

 

}

 

var rectc1 = Rectangle(width: 320.0, height: 480.0)  

print(" :\(rectc1.width) x \(rectc1.height)")

 

var rectc2 = Rectangle(W: 320.0, H: 480.0)           

print(" :\(rectc2.width) x \(rectc2.height)")

 

var rectc3 = Rectangle(length: 500.0)                

print(" 3:\(rectc3.width) x \(rectc3.height)")

 

var rectc4 = Rectangle()                         

print(" 4:\(rectc4.width) x \(rectc4.height)")

Rectangleを構造体タイプとして宣言し、そのうち4つの構造関数がリロードされます.
これは同じタイプでselfを通過する.Init文は、現在のタイプの他のコンストラクション関数を呼び出し、他のコンストラクション関数はコンストラクション関数エージェントと呼ばれます.
 
クラスコンストラクタ横エージェント
クラスには継承関係があるため,クラス構造関数エージェントは複雑で,横エージェントと上向きエージェントに分けられる.
横エージェントは、構造体タイプの構造関数エージェントと同様に、同じクラスの内部で発生します.この構造関数は、便利な構造関数(convenience initializers)と呼ばれます.
アップエージェントは継承の場合、サブクラス構築中に親コンストラクション関数を呼び出し、指定コンストラクション関数(designated initializers)と呼ばれる親のストレージ属性を初期化します.
上記の例を次のように変更します.
class Rectangle {

 

    var width: Double

    var height: Double

    

    init(width: Double, height: Double) {     

        self.width   = width

        self.height  = height

    }

    

    init(W width: Double,H height: Double) {      

        self.width   = width

        self.height  = height

    }

    

    convenience init(length: Double) {            

        self.init(W: length, H: length)

    }

 

    convenience init() {                      

        self.init(width: 640.0, height: 940.0)

    }

 

}

 

var rectc1 = Rectangle(width: 320.0, height: 480.0)  

print(" :\(rectc1.width) x \(rectc1.height)")

 

var rectc2 = Rectangle(W: 320.0, H: 480.0)           

print(" :\(rectc2.width) x \(rectc2.height)")

 

var rectc3 = Rectangle(length: 500.0)                

print(" 3:\(rectc3.width) x \(rectc3.height)")

 

var rectc4 = Rectangle()                         

print(" 4:\(rectc4.width) x \(rectc4.height)")

Rectangleをクラスとして宣言し、そのうち4つのコンストラクション関数がリロードされます.
 
关东升新浪微博@tony_へようこそ関東昇.智捷教室の微信公共プラットフォームに注目し、最新技術文章、図書、教程情報のより多くの逸品iOS、Cocos、モバイル設計課程を理解し、智捷教室の公式サイトに注目してください.http://www.zhijieketang.com智捷教室フォーラムのウェブサイト:http://51work6.com/forum.php