enum Food {
case spagetti
case hamburger
case coke
case cake, pizza, susi //연속적인 항목선언 가능
}
let b: Food = Food.spagetti
let a: Food = .spagetti //타입이 지정됬다면 열거형 이름은 생략이 가능하다.
print(a, b) //spagetti spagetti
아래코드에 주목해보자
let a: Food = .spagetti
a변수에 타입을 Food라고 지정해주면 .spagetti를 부여할 때 Food 생략 가능한 것을 알 수 있다.
주의해야할 점은 .spagetti앞에는 반드시 공백이 존재해야한다는 점이다.
공백을 지정하지 않으면 오류가 발생한다
추가적으로 swift의 =
대입연산자는 양옆항이 같은 공백영역을 가져야 한다.
//오류가 발생하는 경우
let a: Food= .spagetti
let a: Food =.spagetti
let a: Food=.spagetti
//올바른경우
let a: Food = .spagetti
enum Food2: String {
case pizza="bread"
case hamburger="meal"
case chicken="animal",soda="juice"
case steak //지정값은 선택사항이다.
}
let meal = Food2.pizza;
print(meal.rawValue); //bread
//지정값 타입이 String인 경우는 각항목의 이름이 지정값이 된다.
print (Food2.steak.rawValue); //steak
//타입이 Int의 경우 앞의 항목부터 0부터 오름차순으로 자동 지정된다.
enum TestInt: Int{
case zero
case one
case two
}
print(TestInt.zero.rawValue, TestInt.one.rawValue, TestInt.two.rawValue) //0 1 2
//옵셔널 바인딩 사용
if let bind = Food2(rawValue: "bread"){
print(bind) //pizza
}
else {
print("해당하는 원시값을 가진 항목이 없습니다.")
}
위의 지정값과 다르게 항목마다 다른 타입의 값을 가질수 있다.
enum Date {
case birthday(year: Int, month: Int, date: Int) //튜플형
case birth_year(Int) //이름을 명시하지 않아도 된다
}
let myDay:Date = .birthday(year: 2002, month: 4, date: 32)
let myYear:Date = .birth_year(2002);
print(myDay) //birthday(year: 2002, month: 4, date: 32)
print(myYear) //birth_year(2002)
enum Cooking {
case rare, medium, wellDone
}
enum Sauce {
case ketchap, mustard, redWine
}
enum Food {
case steak(_ level: Cooking, _ sauce: Sauce, _ animal: String)
}
func steakOlder(_ data: Food){
switch(data){
case .steak(Cooking.medium, Sauce.mustard, "Beaf"):
print("That't my steak.")
case .steak(Cooking.medium, Sauce.mustard, _):
print("Well, give to me.")
case .steak(Cooking.medium, Sauce.redWine, let animal):
print("I dont mind where it came from, give me that \(animal) steak.")
case let .steak(level, sauce, animal): //모든 연관값을 바인딩할 때
print("\(level) \(sauce) \(animal) steak well, give me.");
}
}
steakOlder(Food.steak(Cooking.medium, Sauce.mustard, "Beaf")) //That't my steak.
steakOlder(Food.steak(Cooking.medium, Sauce.mustard, "Pork")) //Well, give to me.
steakOlder(Food.steak(Cooking.medium, Sauce.redWine, "Pork"))
//I dont mind where it came from, give me that Pork steak.
steakOlder(Food.steak(Cooking.rare, Sauce.ketchap, "Chicken"))
//rare ketchap Chicken steak well, give me.
enum School: CaseIterable {
case elementary, middle, high, university
}
//지정값이 있는 경우
enum School: String, CaseIterable {
case elementary="초등학교"
case middle="중학교"
}
+위 내용에 대해서는 map/reduce 학습후 추가로 포스팅 하겠다.(22.7.10)