【发布时间】:2021-01-23 20:36:08
【问题描述】:
我是 Swift 新手,所以我希望这不是什么傻事。我正在尝试构建一个结构数组,其中一个参数是另一个数组,其中包含另一个结构。我不确定是否有更好的方法,但我认为在我尝试编辑嵌入式结构之前我取得了非常好的进展。在它的简化形式中,它看起来像这样......
struct Group: Identifiable, Codable {
var id = UUID()
var name: String
var number: Int
var spaces: Bool
var businesses: [Business]
}
struct Business: Identifiable, Codable {
var id = UUID()
var name: String
var address: String
var space: Int
var enabled: Bool
}
这些用于具有存储在用户默认值中的可观察变量的类中
class GroupSettings: ObservableObject {
@Published var groups = [Group]() {
didSet {
UserDefaults.standard.set(try? PropertyListEncoder().encode(groups), forKey: "groups")
}
}
init() {
if let configData = UserDefaults.standard.value(forKey: "groups") as? Data {
if let userDefaultConfig = try?
PropertyListDecoder().decode(Array<Group>.self, from: configData){
groups = userDefaultConfig
}
}
}
}
它传入我的初始视图,然后我想要制作一个“编辑详细信息”屏幕。当它进入编辑详细信息屏幕时,我可以在文本显示中显示业务信息,但我无法让它在 TextField 中工作,它抱怨无法将 a 转换为绑定,但名称来自初始结构工作正常,与 Int 类似的问题...
我通过@Binding 属性将第一个视图中包含组数组的组传递到详细信息屏幕...
@Binding var group: Group
var body: some View {
TextField("", text: $group.name) <---- WORKS
List {
ForEach(self.group.businesses){ business in
if business.enabled {
Text(business.name) <---- WORKS
TextField("", business.address) <---- FAILS
TextField("", value: business.space, formatter: NumberFormatter()) <---- FAILS
} else {
Text("\(business.name) is disabled"
}
}
}
}
希望我已经很好地解释了自己,并且有人可以指出我的方式的错误。我确实尝试将第二个结构嵌入到第一个结构中,但这没有帮助。
提前致谢!
【问题讨论】:
-
尝试阅读stackoverflow.com/questions/63839270/…,它向您展示了如何使用数组创建绑定。我可以看到 business.address 不是绑定变量
-
@NotAPhoenix 我查看了您发布的链接,但正如我在问题中所说,我是 Swift 新手,我很难理解该链接如何帮助我的用例。没有任何嵌入式结构数组,我无法理解如何将该解决方案应用于我的问题。如果您有时间,您可以添加一个带有更多上下文或一些指针的答案,以帮助我朝着正确的方向前进。
标签: swift string struct binding swiftui