Smart Device/Swift

Swift Initialization Parameter

언덕너머에 2015. 6. 23. 21:13

Initialization Parameter

Initialization은 파라미터가 필요없다. 그러나 초기화를 할때 파라미터로 넘긴 값을 사용하여 초기화할 필요가 있다.

이런 경우에 사용하는 방법이 Initialization 파라미터 이다.


struct Grade {

    var koreanGrade : Int

    var englishGrade : Int

    

    init(fromKoreanCount koreanCount :Int, fromEnglishCount englishCount : Int) {

        koreanGrade = min(koreanCount * 5, 100)

        englishGrade = min(englishCount * 5, 100)

    }

    

    init(fromKoreanScore koreanScore : Int, fromEnglishScore englishScore : Int) {

        koreanGrade = koreanScore

        englishGrade = englishScore

    }

}


let myGrade = Grade(fromKoreanCount: 15, fromEnglishCount: 17)

println(" 국어점수는 \(myGrade.koreanGrade)이고, 영어점수는 \(myGrade.englishGrade)이다")


let yourGrade = Grade(fromKoreanScore: 95, fromEnglishScore: 100)

println(" 국어점수는 \(yourGrade.koreanGrade)이고, 영어점수는 \(yourGrade.englishGrade)이다.")


--> " 국어점수는 75이고, 영어점수는 85이다"

--> " 국어점수는 95이고, 영어점수는 100이다."


구조체 Grade는 두 개의 Initialization을 갖고 있다. 두 개의Initialization을 구분할 수 있는 것은 파라미터의 이름들이

다르기 때문이다.


위 예제의 Initialization은 외부이름(external name)을 사용하여 이니셜라이즈를 사용했지만 다음과 같이 생략할 수도

있고, 해시심볼(#)을 사용해서 표시할 수도 있다.


생략

struct Grade {

    var koreanGrade : Int

    var englishGrade : Int

    

    init(koreanCount :Int, englishCount : Int) {

        koreanGrade = min(koreanCount * 5100)

        englishGrade = min(englishCount * 5100)

    }

    

    init(koreanScore : Int, englishScore : Int) {

        koreanGrade = koreanScore

        englishGrade = englishScore

    }

}


let myGrade = Grade(koreanCount: 15, englishCount: 17)

println(" 국어점수는 \(myGrade.koreanGrade)이고영어점수는 \(myGrade.englishGrade)이다")


let yourGrade = Grade(koreanScore: 95, englishScore: 100)

println(" 국어점수는 \(yourGrade.koreanGrade)이고영어점수는 \(yourGrade.englishGrade)이다.")


해시심볼(#)

struct Grade {

    var koreanGrade : Int

    var englishGrade : Int

    

    init(#koreanCount :Int, #englishCount : Int) {

        koreanGrade = min(koreanCount * 5100)

        englishGrade = min(englishCount * 5100)

    }

    

    init(#koreanScore : Int, #englishScore : Int) {

        koreanGrade = koreanScore

        englishGrade = englishScore

    }

}


let myGrade = Grade(koreanCount: 15, englishCount: 17)

println(" 국어점수는 \(myGrade.koreanGrade)이고영어점수는 \(myGrade.englishGrade)이다")


let yourGrade = Grade(koreanScore: 95, englishScore: 100)

println(" 국어점수는 \(yourGrade.koreanGrade)이고영어점수는 \(yourGrade.englishGrade)이다.")