【发布时间】:2021-04-10 19:02:54
【问题描述】:
我想创建一个简单的程序来编辑这个 JSON:https://pastebin.com/7jXyvi6Y 我创建了 Smoothie 结构并将冰沙读入数组。 现在我想创建一个新的 Smoothie 实例,我应该将它作为参数传递给 SmoothieForm。在 Smoothie 表单中,我应该用值完成字段,然后这个冰沙应该添加到数组中,并且数组应该保存在 json 中。 如何创建此 Smoothie 结构的新实例?以及如何追加到数组中?
我的冰沙有结构
import Foundation
import SwiftUI
struct Smoothie : Hashable, Codable, Identifiable {
var id: Int
var name: String
var category: Category
var wasDone: Bool
var isFavorite: Bool
var time: String
var ingedients: [Ingedients]
var steps: [Steps]
var image : Image {
Image(imageName)
}
enum Category: String, CaseIterable, Codable {
case forest = "Forest fruit"
case garden = "Garden fruit"
case egzotic = "Exotic"
case vegatble = "Vegetables"
}
private var imageName: String
struct Steps: Hashable, Codable {
var id: Int
var description: String
}
struct Ingedients: Hashable, Codable {
var id: Int
var name: String
var quantity: Double
var unit: String
}
}
现在我用前几个字段构建了表单视图:
struct SmoothieForm: View {
var body: some View {
VStack {
Text("Add smooth")
HStack {
Text("Name")
TextField("Placeholder", text: .constant(""))
}
HStack {
Text("Category")
TextField("Placeholder", text: .constant(""))
}
HStack {
Text("Time")
TextField("Placeholder", text: .constant(""))
}
Divider()
}
.padding(.all)
}
}
struct SmoothieForm_Previews: PreviewProvider {
static var previews: some View {
SmoothieForm()
}
}
从 json 加载数据的类:
import Foundation
final class ModelData:ObservableObject{
@Published var smoothies: [Smoothie] = load("smoothieData.json")
}
func load<T: Decodable>(_ filename: String) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename,withExtension: nil) else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
我每天都在使用 c#
【问题讨论】:
-
你弄明白了吗?
-
我与您的回复合作 :) 并且您的回复非常有帮助,所以感谢您的时间 :) 现在我想在 vm.smoothies.append(newSmoothie) 之后返回 listView(上一个视图)然后将所有数组保存在 json 中 :)