Как переключаться между двумя перечислениями в Swift? - PullRequest
1 голос
/ 11 мая 2019

У меня есть 3 перечисления: тип расчета (+, -), категории для + (10 случаев), категории для - (15 случаев).

Итак, как использовать мое перечисление, чтобы, в зависимости от типа расчета, экземпляр модели мог принять желаемый листинг.

//Example of Model
class Transaction {

    var typeOfCalculation: TypeOfCalculation 
    var category: CategoryForConsuption
}

enum TypeOfCalculation {
    case income
    case consuption
}

enum CategoryForConsuption{
    case noCategories
    case food
    case cafesAndRestaurants
    case manufacturedGoods
}

enum CategoryForIncome {
    case salary
    case debt repayment
} 

Логика такова: если тип расчета - потребление, то мы переключаемся на CategoryForConsuption, а если доход, то мы меняем на CategoryForIncome.

Я редактировал модель:

enum Accounting {
    case income(category: IncomeCategory)
    case consumption(category: ConsumptionCategory)
}

enum ConsumptionCategory: String, CaseIterable {
    case noCategories = "No categories"
    case food = "Food"
    case cafesAndRestaurants = "Cafes and Restaurants"
    case manufacturedGoods = "Manufactured Goods"
    case forceMajeure = "Force Majeure"
}

enum IncomeCategory: String, CaseIterable {
    case salary = "Salary"
    case deposit = "Deposit"
}

Но теперь у меня новая проблема. Потому что мне нужно использовать все это для моей модели данных (realM). Что мне делать?

Вот моя старая модель данных:

  @objc dynamic private var privateTypeOfCalculation: String = TypeOfCalculation.consumption.rawValue
var typeOfCalculation: TypeOfCalculation {
get { return TypeOfCalculation(rawValue: privateTypeOfCalculation)! }
set { privateTypeOfCalculation = newValue.rawValue }
}

 @objc dynamic private var privateCategoryForConsuption: String = CategoryForConsuption.noCategories.rawValue
var categoryForConsuption: CategoryForConsuption {
get { return CategoryForConsuption(rawValue: privateCategoryForConsuption)! }
 set { privateCategoryForConsuption = newValue.rawValue }
 }

1 Ответ

2 голосов
/ 11 мая 2019

Вы можете сделать TypeOfCalculation иметь связанные значения :

enum TypeOfCalculation {
    case consuption(category: CategoryForConsuption)
    case income(category: CategoryForIncome)
}

И тогда вам нужно всего лишь иметь typeOfCalculation в вашей модели:

class Transaction {

    var typeOfCalculation: TypeOfCalculation
}

Я также предлагаю вам переименовать ваши дела и перечислить имена:

enum Calculation {
    case consumption(category: ConsumptionCategory)
    case income(category: IncomeCategory)
}

class Transaction {

    var calculation: Calculation
}

Затем вы можете включить calculation следующим образом:

switch transaction {
   case consumption(let category):
       ...
   case income(let category):
       ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...