簡體   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