Как разрешить структурной переменной использовать несколько перечислений? - PullRequest
0 голосов
/ 19 октября 2019

Возможно странный вопрос, но здесь идет. Я новичок в перечислениях и только начал использовать их в своем коде. У меня есть структура Points, которая имеет несколько переменных, одной из которых является enum PointCategory. Проблема в том, что иногда я хочу, чтобы var itemCategory также разрешал другое перечисление: BudgetCategory.

Я знаю, что не могу этого сделать:

struct Points {
    var itemCategory: PointCategory || BudgetCategory
}

, потому что он производитошибка. Но это по сути то, что я хочу сделать. Я полагаю, это как подкласс enum? Или что-то типа того. Есть ли способ разрешить одной из моих переменных структуры использовать более одного перечисления?

Вот текущий код:

enum BudgetCategory: String {
    case clothing = "Clothing"
    case donations = "Donations"
    case electronics = "Electronics"
    case funMoney = "Fun Money"
    case musicArt = "Music & Art"
    case other = "Other"
    case personalCare = "Personal Care"
    case savings = "Savings"
    case school = "School"
    case sportsDance = "Sports & Dance"
    case summerCamps = "Summer Camps"
    case transportation = "Transportation"
}

enum PointCategory: String {
    case outsideIncome = "outside income"
    case fees = "fees"
    case otherJobs = "other jobs"
    case payday = "payday"
    case dailyJobs = "daily jobs"
    case dailyHabits = "daily habits"
    case weeklyJobs = "weekly jobs"
    case otherTransactions = "other transactions"
    case all = "all"
    case unpaid = "unpaid"
}

struct Points {
    var user: String
    var itemName: String
    var itemCategory: PointCategory
    var code: PointCode
    var valuePerTap: Int
    var itemDate: Double
    var paid: Bool
}

Или я ошибаюсь? Я открыт для объяснений и предложений.

1 Ответ

2 голосов
/ 19 октября 2019

Контекст неясен, но вы можете использовать дженерики

protocol CustomCategory {}

enum BudgetCategory: String, CustomCategory {
    ...
}

enum PointCategory: String, CustomCategory {
    ...
}

struct Points<T : CustomCategory> {
    var user: String
    var itemName: String
    var itemCategory: T
    var code: PointCode
    var valuePerTap: Int
    var itemDate: Double
    var paid: Bool
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...