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 * 5, 100)
englishGrade = min(englishCount * 5, 100)
}
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 * 5, 100)
englishGrade = min(englishCount * 5, 100)
}
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)이다.")
'Smart Device > Swift' 카테고리의 다른 글
Swift Playground에서 console output 보여주기 (0) | 2015.06.23 |
---|---|
Swift Initialization Optional (0) | 2015.06.23 |
Swift 상속(Inheritance) (0) | 2015.06.22 |
Swift Property Observer (0) | 2015.06.09 |
Swift mutating (0) | 2015.06.09 |