diff --git a/JuiceMaker/JuiceMaker.xcodeproj/project.pbxproj b/JuiceMaker/JuiceMaker.xcodeproj/project.pbxproj index 468049797..569d9b731 100644 --- a/JuiceMaker/JuiceMaker.xcodeproj/project.pbxproj +++ b/JuiceMaker/JuiceMaker.xcodeproj/project.pbxproj @@ -15,11 +15,9 @@ C73DAF40255D0CDE00020D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C73DAF3F255D0CDE00020D38 /* Assets.xcassets */; }; C73DAF43255D0CDF00020D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C73DAF41255D0CDF00020D38 /* LaunchScreen.storyboard */; }; C73DAF4C255D0D0400020D38 /* JuiceMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C73DAF4B255D0D0400020D38 /* JuiceMaker.swift */; }; - E52D141227BBF0B700F6566D /* Juicable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E52D141127BBF0B700F6566D /* Juicable.swift */; }; E52D141427BBF2AF00F6566D /* Fruit.swift in Sources */ = {isa = PBXBuildFile; fileRef = E52D141327BBF2AF00F6566D /* Fruit.swift */; }; E52D141627BBF3B400F6566D /* Recipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = E52D141527BBF3B400F6566D /* Recipe.swift */; }; E52D141827BBF48200F6566D /* Juice.swift in Sources */ = {isa = PBXBuildFile; fileRef = E52D141727BBF48200F6566D /* Juice.swift */; }; - E52D141A27BBFA9D00F6566D /* JuiceMakeResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = E52D141927BBFA9D00F6566D /* JuiceMakeResult.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -33,11 +31,9 @@ C73DAF42255D0CDF00020D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; C73DAF44255D0CDF00020D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C73DAF4B255D0D0400020D38 /* JuiceMaker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JuiceMaker.swift; sourceTree = ""; }; - E52D141127BBF0B700F6566D /* Juicable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Juicable.swift; sourceTree = ""; }; E52D141327BBF2AF00F6566D /* Fruit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fruit.swift; sourceTree = ""; }; E52D141527BBF3B400F6566D /* Recipe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Recipe.swift; sourceTree = ""; }; E52D141727BBF48200F6566D /* Juice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Juice.swift; sourceTree = ""; }; - E52D141927BBFA9D00F6566D /* JuiceMakeResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JuiceMakeResult.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,8 +50,6 @@ C71CD66D266C7B470038B9CB /* Controller */ = { isa = PBXGroup; children = ( - C73DAF36255D0CDD00020D38 /* AppDelegate.swift */, - C73DAF38255D0CDD00020D38 /* SceneDelegate.swift */, C73DAF3A255D0CDD00020D38 /* ViewController.swift */, ); path = Controller; @@ -66,11 +60,9 @@ children = ( C73DAF4B255D0D0400020D38 /* JuiceMaker.swift */, C71CD66A266C7ACB0038B9CB /* FruitStore.swift */, - E52D141127BBF0B700F6566D /* Juicable.swift */, E52D141327BBF2AF00F6566D /* Fruit.swift */, E52D141527BBF3B400F6566D /* Recipe.swift */, E52D141727BBF48200F6566D /* Juice.swift */, - E52D141927BBFA9D00F6566D /* JuiceMakeResult.swift */, ); path = Model; sourceTree = ""; @@ -104,6 +96,7 @@ C73DAF35255D0CDD00020D38 /* JuiceMaker */ = { isa = PBXGroup; children = ( + E8CEBFAB27BCA96D009CD8DE /* Application */, C71CD66D266C7B470038B9CB /* Controller */, C71CD66F266C7B500038B9CB /* Model */, C71CD671266C7B570038B9CB /* View */, @@ -112,6 +105,15 @@ path = JuiceMaker; sourceTree = ""; }; + E8CEBFAB27BCA96D009CD8DE /* Application */ = { + isa = PBXGroup; + children = ( + C73DAF36255D0CDD00020D38 /* AppDelegate.swift */, + C73DAF38255D0CDD00020D38 /* SceneDelegate.swift */, + ); + path = Application; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,12 +184,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E52D141227BBF0B700F6566D /* Juicable.swift in Sources */, C71CD66B266C7ACB0038B9CB /* FruitStore.swift in Sources */, C73DAF3B255D0CDD00020D38 /* ViewController.swift in Sources */, C73DAF37255D0CDD00020D38 /* AppDelegate.swift in Sources */, E52D141827BBF48200F6566D /* Juice.swift in Sources */, - E52D141A27BBFA9D00F6566D /* JuiceMakeResult.swift in Sources */, E52D141427BBF2AF00F6566D /* Fruit.swift in Sources */, C73DAF39255D0CDD00020D38 /* SceneDelegate.swift in Sources */, C73DAF4C255D0D0400020D38 /* JuiceMaker.swift in Sources */, diff --git a/JuiceMaker/JuiceMaker/Controller/AppDelegate.swift b/JuiceMaker/JuiceMaker/Application/AppDelegate.swift similarity index 100% rename from JuiceMaker/JuiceMaker/Controller/AppDelegate.swift rename to JuiceMaker/JuiceMaker/Application/AppDelegate.swift diff --git a/JuiceMaker/JuiceMaker/Controller/SceneDelegate.swift b/JuiceMaker/JuiceMaker/Application/SceneDelegate.swift similarity index 100% rename from JuiceMaker/JuiceMaker/Controller/SceneDelegate.swift rename to JuiceMaker/JuiceMaker/Application/SceneDelegate.swift diff --git a/JuiceMaker/JuiceMaker/Controller/ViewController.swift b/JuiceMaker/JuiceMaker/Controller/ViewController.swift index 19f26dc83..82dc3c684 100644 --- a/JuiceMaker/JuiceMaker/Controller/ViewController.swift +++ b/JuiceMaker/JuiceMaker/Controller/ViewController.swift @@ -12,7 +12,4 @@ class ViewController: UIViewController { super.viewDidLoad() // Do any additional setup after loading the view. } - - } - diff --git a/JuiceMaker/JuiceMaker/Model/Fruit.swift b/JuiceMaker/JuiceMaker/Model/Fruit.swift index 8d30c69b8..4c2da1605 100644 --- a/JuiceMaker/JuiceMaker/Model/Fruit.swift +++ b/JuiceMaker/JuiceMaker/Model/Fruit.swift @@ -7,10 +7,25 @@ import Foundation -enum Fruit: Juicable, CaseIterable, Hashable { +enum Fruit: CaseIterable { case strawberry case banana case pineapple case kiwi case mango + + var name: String { + switch self { + case .strawberry: + return "딸기" + case .banana: + return "바나나" + case .pineapple: + return "파인애플" + case .kiwi: + return "키위" + case .mango: + return "망고" + } + } } diff --git a/JuiceMaker/JuiceMaker/Model/FruitStore.swift b/JuiceMaker/JuiceMaker/Model/FruitStore.swift index c0571d9d4..db88634a5 100644 --- a/JuiceMaker/JuiceMaker/Model/FruitStore.swift +++ b/JuiceMaker/JuiceMaker/Model/FruitStore.swift @@ -6,6 +6,10 @@ import Foundation +enum FruitStoreError: String, Error { + case notEnoughFruit = "과일이 부족합니다." +} + // 과일 저장소 타입 class FruitStore { private var stock: [Fruit: Int] = [:] @@ -20,29 +24,16 @@ class FruitStore { } } - private func reduceFruit(fruit: Fruit, count: Int) { + private func reduceFruit(fruit: Fruit, count: Int) throws { guard let currentFruitCount = stock[fruit], currentFruitCount >= count else { - fatalError() + throw FruitStoreError.notEnoughFruit } stock[fruit] = currentFruitCount - count } - func useFruit(juice: Juice) { - juice.recipe.fruitList.forEach { fruitInfo in - reduceFruit(fruit: fruitInfo.fruit, count: fruitInfo.count) - } - } - - func canMakeJuice(juice: Juice) -> Bool { + func useFruit(juice: Juice) throws { for fruitInfo in juice.recipe.fruitList { - guard let currentFruitCount = stock[fruitInfo.fruit] else { - return false - } - - if currentFruitCount < fruitInfo.count { - return false - } + try reduceFruit(fruit: fruitInfo.fruit, count: fruitInfo.count) } - return true } } diff --git a/JuiceMaker/JuiceMaker/Model/Juicable.swift b/JuiceMaker/JuiceMaker/Model/Juicable.swift deleted file mode 100644 index 509e2a213..000000000 --- a/JuiceMaker/JuiceMaker/Model/Juicable.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// Juicable.swift -// JuiceMaker -// -// Created by temp2 on 2022/02/15. -// - -import Foundation - -protocol Juicable { - -} diff --git a/JuiceMaker/JuiceMaker/Model/JuiceMakeResult.swift b/JuiceMaker/JuiceMaker/Model/JuiceMakeResult.swift deleted file mode 100644 index 9a912640d..000000000 --- a/JuiceMaker/JuiceMaker/Model/JuiceMakeResult.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// JuiceMakeResult.swift -// JuiceMaker -// -// Created by temp2 on 2022/02/16. -// - -import Foundation - -enum JuiceMakeResult { - case success - case fail(needFruits: [Fruit]) - - var description: String { - switch self { - case .success: - return "쥬스 만들기 성공" - case .fail(let needFruits): - return "과일 \(needFruits) 부족" - } - } -} diff --git a/JuiceMaker/JuiceMaker/Model/JuiceMaker.swift b/JuiceMaker/JuiceMaker/Model/JuiceMaker.swift index ce2d28401..1fd68e68f 100644 --- a/JuiceMaker/JuiceMaker/Model/JuiceMaker.swift +++ b/JuiceMaker/JuiceMaker/Model/JuiceMaker.swift @@ -10,11 +10,13 @@ import Foundation struct JuiceMaker { private var fruitStore: FruitStore = FruitStore() - func makeJuice(juice: Juice) -> JuiceMakeResult { - if fruitStore.canMakeJuice(juice: juice) { - fruitStore.useFruit(juice: juice) - return .success + func makeJuice(juice: Juice) { + do { + try fruitStore.useFruit(juice: juice) + } catch let error as FruitStoreError { + print(error.rawValue) + } catch { + print(error) } - return .fail(needFruits: []) //TODO: 부족한 과일 종류 전달 필요함 } } diff --git a/README.md b/README.md index 50ba2d757..a5827c54a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ iOS 쥬스 메이커 재고관리 시작 저장소

- + ## 팀원 - [higgs](https://github.com/higgs1022)