ZBLOG

// MARK: Define the SPORT enum enum SPORT: Int32, CaseIterable { case SKIP_ROPE = 8 case SIT_UP = 2 var jsonFilePath: String? { switch self { case .SKIP_ROPE: return Bundle.main.path(forResource: "skip_rope...

是的,你的 SPORT 枚举定义基本上是正确的,使用了原始值类型 Int32CaseIterable 协议,能够很方便地处理与 JSON 文件相关的数据加载。下面是一些可能需要注意的细节和最佳实践:

完整示例

// MARK: Define the SPORT enum
enum SPORT: Int32, CaseIterable {
    case SKIP_ROPE = 8
    case SIT_UP = 2

    var jsonFilePath: String? {
        switch self {
        case .SKIP_ROPE:
            return Bundle.main.path(forResource: "skip_rope", ofType: "json")
        case .SIT_UP:
            return Bundle.main.path(forResource: "sit_up", ofType: "json")
        }
    }

    func loadData<T: Codable>() -> T? {
        guard let path = jsonFilePath else { return nil }
        
        do {
            let data = try Data(contentsOf: URL(fileURLWithPath: path))
            let decodedData = try JSONDecoder().decode(T.self, from: data)
            return decodedData
        } catch {
            print("Error loading data for \(self.rawValue): \(error)")
            return nil
        }
    }
}

使用说明

  1. 泛型支持:在 loadData() 方法中,我使用了泛型 <T: Codable>,这使得该方法可以返回不同类型的数据。这样你就可以根据传入的数据模型来解码,而不必为每种运动单独编写一个加载方法。

  2. 错误处理:在你的实现中,使用 do-catch 来捕捉并打印任何潜在的错误,这是一种良好的实践。

  3. JSON文件路径:确保你的 JSON 文件(如 skip_rope.jsonsit_up.json)已经添加到你的项目中,并且这些文件确实存在于主包中。

调用示例

如果你有相应的模型类,比如:

struct SkipRopeData: Codable {
    // 定义你的属性
}

struct SitUpData: Codable {
    // 定义你的属性
}

你可以通过枚举实例来加载数据,如下所示:

if let skipRopeInfo: SkipRopeData = SPORT.SKIP_ROPE.loadData() {
    print("Loaded skip rope data:", skipRopeInfo)
}

if let sitUpInfo: SitUpData = SPORT.SIT_UP.loadData() {
    print("Loaded sit up data:", sitUpInfo)
}

这段代码会尝试从对应的 JSON 文件中加载数据并解析成相应的结构体。整体逻辑看起来很好,如果有其他问题或需要更深入的信息,请告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21573

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?