【发布时间】:2019-12-07 11:11:11
【问题描述】:
我想要做的是当我启动应用程序时,保存所有模型中常量的所有名称(在 userDefault 中)。我打算用一个看起来像这样的函数来做:
public static func setup(models: [Codable]) {
models.forEach { (model) in
let mirr = Mirror.init(reflecting: model)
mirr.children.map({
UserDefaults.save("\(type(of: model))+\($0.label!)")})
}
}
请注意,我还没有完成。
据我所知,使用此方法有 3 种解决方案。除非变量/常量具有实际值,否则镜子不会显示标签。它变得非常丑陋,我想知道我是否可以做一些工作,因为现在你这样称呼它。
场景 A:
public struct Testing: Codable {
let name: String = ""
let sex: String = ""
}
setup(models: [Testing()])
场景 B:
public struct testing: Codable {
let name: String
let sex: String
}
setup(models: [Testing(name: "", sex: "")])
场景 C:
public struct testing: Codable {
let name: String
let sex: String
init(name: String = "", sex: String = "") {
self.name = name
self.sex = sex
}
}
setup(models: [Testing()])
所以基本上我想做的是:
public struct testing: Codable {
let name: String
let sex: String
}
setup(models: [Testing()])
// or
setup(models: [Testing.self])
或者任何不会强迫我初始化值的东西。 我想这是不可能的,但也许有人有一些黑客在那里工作...... 提前致谢。
【问题讨论】:
-
如果不处理 JSON 类型,为什么还要使用 Codable?您可以根据需要简单地使用 init 创建一个结构。
-
我将在稍后阶段使用可编码。正如我提到的,我不想创建那种 init,因为它很难看。并且有点使编码变得多余
-
好吧,那有什么丑陋的?
-
我不想创建一个仅用于此目的的 init 方法。想象一下有 10 个具有 10-15 个值的结构体......这是我们不会使用的很多行。
标签: swift struct initialization mirror