【发布时间】:2020-09-26 15:36:41
【问题描述】:
好的,所以我已经为此工作了好几天,但没有找到任何有意义的答案。我在 SwiftUI 中有一个表单,使用 @ObservedObject 从结构中提取变量。在该表单中,我有各种用户可以与之交互的文本字段和选择器。但是,我无法弄清楚如何让我的“添加”按钮将该数据实际添加到应用程序中的任何其他视图中。我按照 WWDC20 的三明治教程进行了重大更改,因此有一个带有“testData”的快速文件,基本上我正在尝试获取它,以便按钮使用用户输入来附加 testData 并显示它而不是什么。
struct Horse: Identifiable {
var id = UUID()
var name: String
var gender: String
var breed: String
var type: String
var scale: String
var brand: String
var finish: String
var specialty: String
var imageName: String { return name }
var thumbnailName: String { return name + "Thumb" }
}
let testData = [
Horse(name: "Van Gogh", gender: "Stallion", breed: "Unknown", type: "Customized", scale: "Stablemate", brand: "Peter Stone", finish: "Gloss", specialty: "OOAK")
]
所以这就是我用来建立 testData 以及应该包含在其中的参数。
func addANewHorse() {
withAnimation {
testStore.horses.append(Horse(name: "\(horseDetails.horseName)", gender: "\(horseDetails.selectedGender.rawValue)", breed: "\(horseDetails.horseBreed)", type: "\(horseDetails.type.rawValue)", scale: "\(horseDetails.scale.rawValue)", brand: "\(horseDetails.brand.rawValue)", finish: "\(horseDetails.finish.rawValue)", specialty: "\(horseDetails.specialty.rawValue)"))
}
}
Button("Add", action: {
addANewHorse();
self.presentationMode.wrappedValue.dismiss()
})
这就是我用来尝试附加 testData 以使用用户输入进行更新的方法。我知道这有点不稳定,但有人有什么建议吗? - -编辑 - - 我的主应用程序文件如下所示...
@main
struct Pferd_HerdApp: 应用程序 {
@StateObject private var store = HorseStore()
@StateObject private var horseDetails = HorseDetails()
var body: some Scene {
WindowGroup {
ContentView(store: store, horseDetails: HorseDetails())
}
}
}
我的马店课是这样的……
class HorseStore: ObservableObject {
@Published var horses: [Horse]
init(horses: [Horse] = []) {
self.horses = horses
}
}
让 testStore = HorseStore(horses: testData)
另外,“HorseDetails”是我试图从中提取数据以附加 testData 的 observableobject,所以这里是它的代码
class HorseDetails: ObservableObject {
@Published var horseName = ""
@Published var selectedGender = Gender.allCases[0]
@Published var horseBreed = ""
@Published var purchaseDate = Date()
@Published var winCount = ""
@Published var notes = ""
@Published var brand = Brands.allCases[0]
@Published var type = Type.allCases[0]
@Published var scale = Scale.allCases[0]
@Published var finish = Finish.allCases[0]
@Published var specialRun = false
@Published var specialty = Specialty.allCases[0]
} var horseDetails = HorseDetails()
我将 testData 的 let 更改为变量
【问题讨论】:
-
让变量定义常量,它只在第一次初始化,所以定义你的列表为@State var list[Horse] = []
标签: swiftui