0

我有一个“食谱”结构,其实例是通过解析JSON文件创建的。映射到 JSON的所有属性Recipe,除了一个:id.

我希望每个 struct 实例都可以通过此属性唯一标识,并且应该在实例化 struct 时生成它,但是,当创建 struct 实例时,它们的所有ids 都是nil.

食谱.swift

import Foundation

struct Recipe: Identifiable, Decodable {
    var id = UUID()
    let name:String
    let featured:Bool
    let image:String
    let description:String
    let prepTime:String
    let cookTime:String
    let totalTime:String
    let servings:Int
    let ingredients:[String]
    let directions:[String]
}

RecipeMode.swift(Recipe 结构的实例)

import Foundation
import SwiftUI

class RecipeModel {
    var recipes = loadRecipes()
}

func loadRecipes() -> [Recipe] {
    var recipes = [Recipe]()
    let fileURL = URL(fileURLWithPath: Bundle.main.path(forResource: "recipes", ofType: "json")!)
    do {
        let data = try Data(contentsOf: fileURL)
        recipes = try JSONDecoder().decode([Recipe].self, from: data)
    } catch {
        print(error)
    }
    return recipes
}
4

1 回答 1

1

使用let id = UUID()代替var id = UUID(),并且id不会被解码。

如果 Xcode 警告吓到你太多,你也可以使用这个:

struct Recipe: Identifiable, Decodable {
    let id = UUID()
    let name:String
    let featured:Bool
    let image:String
    let description:String
    let prepTime:String
    let cookTime:String
    let totalTime:String
    let servings:Int
    let ingredients:[String]
    let directions:[String]
    
    // not including id
    enum CodingKeys: String, CodingKey {
        case name, featured, image, description, prepTime, cookTime
        case totalTime, servings, ingredients, directions
    }
}
于 2022-02-05T13:26:10.567 回答