繁体   English   中英

如何在Swift中的两个枚举之间切换?

[英]How to switch between two enumerations in Swift?

我有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 }
 }

您可以使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):
       ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM