Справка Swift 4.0 - фильтрация, а затем сортировка массива с ответом протокола {get} с использованием перечислений? - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь написать код Swift, но я довольно новичок в Swift, и я действительно не знаю, иду ли я в правильном направлении с этими перечислениями.Любая помощь могла бы быть полезна.

Моя идея состоит в том, чтобы дать пользователю рецепты, которые соответствуют различным ингредиентам, которые пользователь указывает, что он или она имеет в наличии.Я собрал множество рецептов.Каждый объект рецепта имеет несколько характеристик: название, тип еды, необходимое мясо и овощи, необходимые для этого рецепта.

Я также хочу отсортировать новый, более короткий массив по другой переменной - мукетип (сначала завтрак), и я надеюсь также показать только один вариант для каждого типа еды: одна идея на завтрак, одна идея на обед, одна идея на ужин.

Все это добавляет: 1) пользовательские входные ингредиенты, которые он / она имеет в наличии 2) внутренне, весь массив рецептов в базе данных сводится к тому, что доступно 3) использование получает только одну опциюдля каждого приема пищи, завтрак указан первым.

Я думаю, что-то подобное уже существует, но я не видел логики для этого

Должен ли я попытаться поместить эти перечисления в класс RecipeGenerator или что-то в этом роде?как это?И стоит ли писать логику с помощью функции func для переключения перечисления?Или я должен использовать array.filter?array.filter с ключом, значением, потому что у меня есть коллекция?есть идеи ?

enum RecipeCode: String {
   case chickenWithBroccoli = "chicken with broccoli"
   case chickenWithAsparagus = "chicken with asparagus"
   case turkeyWithBroccoli = "turkey with broccoli"
   case turkeyWithAsparagus = "turkey with asparagus"
   case chicken = "chicken"
   case turkey = "turkey"
   case broccoli = "broccoli"
   case asparagus = "asparagus"
}

enum Meat: String {
   case chicken = "chicken"
   case turkey = "turkey"
}

enum Vegetable: String {
   case broccoli = "broccoli"
   case asparagus = "asparagus"
}

enum Meal {
   case dinner
   case lunch
   case breakfast
}

struct Recipes {
   let code: RecipeCode
   let meal: Meal
   let meat: Meat
   let vegetable: Vegetable
}

let recipes = [Recipe(code: .chickenWithBroccoli, meal: .dinner, meat: .chicken, vegetable: .broccoli),
           Recipe(code: .chickenWithAsparagus, meal: .lunch, meat: .chicken, vegetable: .asparagus),
           Recipe(code: .turkeyWithBroccoli, meal: .breakfast, meat: .turkey, vegetable: .broccoli),
           Recipe(code: .turkeyWithAsparagus, meal: .dinner, meat: .turkey, vegetable: .asparagus),
           Recipe(code: .chicken, meal: .lunch, meat: .chicken, vegetable: .none),
           Recipe(code: .turkey, meal: .breakfast, meat: .turkey, vegetable: .none),
           Recipe(code: .broccoli, meal: .dinner, meat: .none, vegetable: .broccoli),
           Recipe(code: .asparagus, meal: .lunch, meat: .none, vegetable: .asparagus)]

protocol AvailableIngredients {
   var chickenAnswer: Bool { get }
   var turkeyAnswer: Bool { get }
   var broccoliAnswer: Bool { get }
   var asparagusAnswer: Bool { get }
   }
...