13-1. 初期化コンセプト、デフォルト初期化(初期化)


初期化は、インスタンスを使用するクラス、構造体、または列挙タイプを準備することを意味します.この手順には、インスタンスに格納されているプロセスの初期値を設定し、新しいインスタンスが使用される準備ができている前に他の設定または初期化を実行することが含まれます.

初期化構文

  • 初期化文は、特定のタイプの新しいインスタンスを生成するために呼び出される.
  • init() {
    	//초기화 구문 작성
    }
  • 新しい構造体定義の間で使用される初期化文の例は、次のとおりです.これは教室でも同様に適用されます.
  • struct Farenheit {
    	var temperature : Double
        
        init() {
        	temperature = 32.0
            //값이 정의되지 않은 프로퍼티의 초기값을 설정해준다.
        }
    }
    
    var f = Farenheight()
    //다음과 같이 구조체를 정의하면 초기값으로서 32를 가지는 프로퍼티와 함께 인스턴스가 생성된다.
  • のデフォルトのproperty値を直接設定して初期化を省略できます.
  • struct Farenheit {
    	var temperature = 32.0
    `
    //다음과 같이 초기화를 해줄 시 별도 초기화 구문 생력이 가능하다.

    カスタム初期化構文

  • 初期化構文では、パラメータによってインスタンスを作成するときに、ユーザが望む値によって作成することができる.
  • struct Celsius {
    	var temperature : Double
        
        init(temp : Int) {
        	temperature = temp
        }
        init(kelvin: Int) {
        	temperature = kelvin - 273.15
    }
    
    let cel = Celsius(temp : 21)
    let cel1 = Celsius(kelvin : 290)
    // 다음과 같이 초기화 파라미터를 통해서 프로퍼티의 초기화가 가능하다.
    //초기화 시 원하는 초기화를 선택해서 적용이 가능하다.
  • 初期化パラメータを渡すときの関数と同様に、パラメータラベルを付与することで適用できます.同様に,パラメータラベルの省略も可能である.
  • struct Carrier {
    	var carrier : Int
        
        init(from number : Int) {
        	carrier = number
        }
        
        init(_ name : Int) {
        	carrier = name
    }
    
    let carrier = Carrier(from : 100)
    let carrier = Carrier(100)
    //다음과 같이 인자 라벨을 사용하여 초기화가 가능하다.
  • ユーザー・タイプの値は、初期化中に設定できないか、後続の値がない可能性があるため、外部タイプとして宣言されることがあります.この場合、nilに初期化され、初期化時に値がないことを示します.傍観者タイプのPropertyは、他の初期値を指定しない限りnilに自動的に初期化できます.
  • class SurveyQuestion {
    	var text : String
        var response : String?
        init(text : String) {
        	self.text = text
        }
        
        func ask() {
        	print(text)
        }
    }
    
    let cheeseQuestion = SurveyQuestion(text : "Do you like cheese?")
    //다음과 같이 초기화 가능하며, 비어있는 것이 가능하므로 초기에 nil부여가 가능하다.
  • の初期化が完了する前に有限値に設定すれば、初期化中にproperty定数にいつでも値を割り当てることができます.クラスインスタンスの場合、初期化中にproperty定数を変更するのは、このpropertyを導入したクラスのみで実行され、サブクラスでは実行されません.
  • class SurveyQuestion {
    	let text : String
        var response : String?
        
        init(text : String) {
        	self.text = text
        }
        
        func ask() {
        	print(text)
        }
    }
    
    let beetsQuestion = SurveyQuestiont(text : "How about beets?")
    beetsQuestion.ask()
    //비츠는 어때? 를 출력한다
    beetsQuestion.response = "I also like beets"