열거형 타입과 그 속에 case의 프로퍼티타입과는 별개의 타입이라는 것이다.
이니셜라이저에 kaiHouse: KauiHouse타입으로 지정한다고가정하면
인스턴스변수로 KauiHouse를 호출할때 rawvalue값을 출력할 수 없다
왜냐면 KauiHouse와 String은 다른타입이기때문이다. 고로 rawvalue값을 출력하고 싶으면 이니셜라이저에 String값으로 지정을 해놓으면 된다.
enum Staff: String{ // 직원
case kiosk, manager, part_time
}
enum SingleBurger: String{// 싱글 버거
case cheeseBurger, bigMac, bulgogiBurger, baconTomatoBurger, surimpBurger, mcChicken, shanghiBurger, none
}
enum BurgerSet: String{// 버거세트종류
case cheeseBurgerAndFrenchFriesAndDrink,
bigMacAndFrenchFriesAndDrink,
bulgogiBurgerAndFrenchFriesAndDrink,
baconTomatoBurgerAndFrenchFriesAndDrink,
surimpBurgerAndFrenchFriesAndDrink,
mcChickenAndFrenchFriesAndDrink,
shanghiBurgerAndFrenchFriesAndDrink
}
enum SideAndDesert: String{//사이드메뉴나 디저트
case cheeseStick, wedgeFries, mcWings, chickenSnackWrap, FrenchFries, hashBrown, mcNuggets, none
}
enum Drink: String{// 음료
case iceCafeLatte, cafeLatte, iceAmericano, americano, espresso, coke, sida, pepsi, hwanta, none
}
enum ForEatPlace: String{ // 식사방법
case here, takeOut
}
enum Payment: String{ // 결제방식
case creditCard, cash, bitcoin
}
public struct BurgerStore{ //
private(set) var staff: Staff = .kiosk
var singleBurger: SingleBurger = .bulgogiBurger
var burgerSet: BurgerSet = .bigMacAndFrenchFriesAndDrink
var sideAndDesert: SideAndDesert = .FrenchFries
var drink: Drink = .coke
var forEatPlace: ForEatPlace = .here
var payment: Payment = .creditCard
func menuChoiseAndBillPrint(singleBurger: String, burgerSet: String, sideAndDesert: String, drink: String, forEatPlace: String, payment: String){ //메뉴 선택 후 명세서 까지
if payment == Payment.creditCard.rawValue{
print("카드를 투입해주세요")
//타이머 설정을 시도했는데 작동이 되질 않는데 피드백을 받고 싶습니다..
// Timer.scheduledTimer(withTimeInterval: 8, repeats: false){ (timer) in
print(".\n.\n.\n.\n.\n승인되었습니다.")
print("=====명세서=====\n버거세트:\(burgerSet)\n싱글버거:\(singleBurger)\n사이드&디저트:\(sideAndDesert)\n음료:\(drink)\n식사방식:\(forEatPlace)\n결제방식:\(payment)")
// }
}else if payment == Payment.cash.rawValue{
print("현금을 투입해주세요")
// Timer.scheduledTimer(withTimeInterval: 8, repeats: false){ (timer) in
print(".\n.\n.\n.\n.\n승인되었습니다.")
print("=====명세서=====\n버거세트:\(burgerSet)\n싱글버거:\(singleBurger)\n사이드&디저트:\(sideAndDesert)\n음료:\(drink)\n식사방식:\(forEatPlace)\n결제방식:\(payment)")
// }
}else if payment == Payment.bitcoin.rawValue{
print("주소로 비트코인 송금해주세요")
// Timer.scheduledTimer(withTimeInterval: 8, repeats: false){ (timer) in
print(".\n.\n.\n.\n.\n승인되었습니다.")
print("=====명세서=====\n버거세트:\(burgerSet)\n싱글버거:\(singleBurger)\n사이드&디저트:\(sideAndDesert)\n음료:\(drink)\n식사방식:\(forEatPlace)\n결제방식:\(payment)")
// }
}
}
}
var KioskOrder: BurgerStore = BurgerStore()
KioskOrder.menuChoiseAndBillPrint(singleBurger: SingleBurger.none.rawValue, burgerSet: BurgerSet.bigMacAndFrenchFriesAndDrink.rawValue, sideAndDesert: SideAndDesert.none.rawValue, drink: Drink.coke.rawValue, forEatPlace: ForEatPlace.takeOut.rawValue, payment: Payment.creditCard.rawValue)
ex) enum KauiHouse: String{ case mather, father, firstbro, secondbro } // 나는 case값들을 인스턴스화한 변수안에 담아 호출하고 싶었다. // 하지만 각타입이 다르기때문에 호출할 수 없다는 컴파일 오류가 계속뜨는데 // 나는 처음에 KauiHouse가 String타입인줄알았다. 간과한부분인데 // 오동나무님께 질문을 한 후 얻게된건 case안에 프로퍼티가 형성이되는데 그 타입이 String인거고 // enum KauiHouse타입은 별개인것이었다. // 고로 인스턴스를 String으로 지정하고 출력하면 //rawvalue값이 출력이되었따.. // 사실 좀 충격적이었지만.. 알게된것에 머리가띵하고 잘 설명해주신 오동나무님께 감사했따..ㅎ //과제 3-3 2)번에서 막혔지만 저걸 알게된후로 시원하게 해결이 되었고 앞으로 질문을 사소한궁금증이라도 //알아보고 잘안되면 바로 바로 질문할것!