首页 > 解决方案 > 如何修复在 Swift 中找不到文件 json

问题描述

我有一个小问题,我尝试解码我​​的 json 代码,帮助我从https://www.hackingwithswift.com/quick-start/swiftui/swiftui-tutorial-building-a-complete-project获得教程,但我的问题是我的函数没有检测到我的文件,我的错误是“致命错误:无法在包中找到 data.json”,如果有人有解决方案,请提前谢谢

// File decode Json

import UIKit

extension Bundle {
    func decode<T: Decodable>(_ type: T.Type, from file: String) -> T {

        guard let url = self.url(forResource: file, withExtension: nil) else {
            fatalError("Failed to locate \(file) in bundle.")
        }

        guard let data = try? Data(contentsOf: url) else {
            fatalError("Failed to load \(file) from bundle.")
        }

        let decoder = JSONDecoder()

        guard let loaded = try? decoder.decode(T.self, from: data) else {
            fatalError("Failed to decode \(file) from bundle.")
        }
        return loaded
    }
}
// File Model

import SwiftUI

struct CharacterModel: Codable, Hashable, Equatable, Identifiable{

    var id:Int
    var name:String
    var force:Int
    var spirituel:Int
    var endurance:Int
    var defensePhysique:Int
    var defenseMagique:Int
    var vitesse:Int

    var mainImage: String {
        name.replacingOccurrences(of: " ", with: "-").lowercased()
    }

    var thumbnailImage: String {
        "\(mainImage)-thumb"
    }

    #if DEBUG
    static let exemple = CharacterModel(
        id: 1,
        name: "Hippo",
        force: 100,
        spirituel: 10,
        endurance: 10,
        defensePhysique: 100,
        defenseMagique: 100,
        vitesse: 10
    )
    #endif

}
// My data.json
[
    {
        "id": 1,
        "name": "Hippo",
        "imageName": "Hippo",
        "Endurance": 100,
        "force": 10,
        "Spirituel": 10,
        "DefensePhysique": 100,
        "DefenseMagique": 100,
        "Vitesse": 10
    }
]
import SwiftUI

struct ContentView: View {
    let character = Bundle.main.decode([CharacterModel].self, from: "data.json")

    var body: some View {
        NavigationView {
            List{
                ForEach(character) { characters in
                    Image(characters.name)
                }
            }
        .navigationBarTitle("Menu")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

标签: swiftui

解决方案


您的项目的捆绑资源中似乎缺少该文件。在项目文件中打开Build Phases选项卡搜索data.json. 如果没有出现,则导航到该部分并使用位于该部分底部的按钮Copy Bundle Resources添加文件。+

在此处输入图像描述


推荐阅读