arrays - 如何快速创建主类/子类数据模型?
问题描述
我正在创建一个预算应用程序,我是编程新手。
我想创建一个类似于 Apple Reminders 应用程序的界面。
第一个视图是主要类别的列表。
当您点击主类别时,将出现子类别列表。
我不确定是使用类还是结构。
这是代码在我心中的样子:
struct Category {
let mainCategories: [String] = [
"Income",
"Housing",
"Transportation",
"Food",
...
]
let incomeSubCategory: [String] = [
"Salary",
"Bonus",
"Rental Income",
...
]
let housingSubCategory: [String] = [
"Mortgage/Rent",
"Property Tax",
"Homeowner's Insurance",
...
]
}
我会以正确的方式解决这个问题吗?或者我应该使用类进行继承?
谢谢。
编辑:
我尝试过使用枚举,但数据似乎不如结构灵活和可访问。
是否可以使 SubCategory 成为 Category 中的结构数组?
像这样:
struct Category {
var name: String
var color: UIColor
var amount: Double
var subCategories: [SubCategory]
}
struct SubCategory {
var name: String
var amount: Double
}
let categories = [
Category(
name: "Income",
color: UIColor(rgb: Constants.green), subCategories: [name: "Paycheck", amount: 2500.00])
]
解决方案
使用Enum
s 代替struct/class
.
enum MainCategory: String, CaseIterable {
case income, housing //...
}
enum IncomeSubCategory: String, CaseIterable {
case salary, bonus //...
}
enum HousingSubCategory: String, CaseIterable {
case rent, tax //...
}
CaseIterable
协议一致性允许您拥有数组allCases
,以防您需要它逐个迭代值。像这样:
MainCategory.allCases.forEach { print($0) }
推荐阅读
- c# - 尝试使用 iTextSharp 将 Windows Form C# 中的图表放入 PDF
- c# - 在 Xamarin Android 上拍照后如何将照片发送到可绘制文件夹?
- rxjs - combineLatest 不会发射任何东西,除非所有内部 observables 都发射了至少 1 次发射
- javascript - 如何在使用nodejs的路径中导入带有@符号的模块?
- android - 将数据库文件存储在 Android 设备中用户所需的位置。我该怎么做?
- python - 循环和递归可以互换吗?
- graphql - 如何在 apollo 客户端缓存中使用“模式”?
- node.js - 在 OAuth2.0 后面使用 nopCommerce API
- bash - 对 while-read 循环设置的变量执行算术运算
- ios - 将按钮添加到列表单元格