SwiftUI中如何将API字符串ID转为整数适配Blackbird存储至SQLite?
解决Blackbird中字符串类型ID作为主键的问题
针对你遇到的Blackbird主键要求问题,有两种直接的解决方式:
方式一:将字符串类型的idMeal指定为主键
直接修改@BlackbirdColumn的参数,把idMeal标记为主键,同时为了满足Identifiable协议的id属性,直接映射到idMeal即可:
struct Meal: Identifiable, Codable, BlackbirdModel { @BlackbirdColumn(primaryKey: true) var idMeal: String @BlackbirdColumn var strMeal: String @BlackbirdColumn var strMealThumb: String // 实现Identifiable协议的id属性 var id: String { idMeal } }
这种方式直接复用API返回的唯一标识,能避免数据库中出现重复的餐品数据,同时完全符合Blackbird的主键要求。
方式二:添加自增整数主键,保留原字符串ID
如果不需要用idMeal作为数据库主键,可以新增一个自增的整数类型id字段作为Blackbird的主键,同时通过编码键忽略该字段,避免API解码出错:
struct Meal: Identifiable, Codable, BlackbirdModel { @BlackbirdColumn(primaryKey: true, autoIncrement: true) var id: Int? @BlackbirdColumn var idMeal: String @BlackbirdColumn var strMeal: String @BlackbirdColumn var strMealThumb: String // 解码时忽略自增id字段 enum CodingKeys: String, CodingKey { case idMeal, strMeal, strMealThumb } }
这种方式适合只需要数据库内部主键的场景,注意id要设为可选类型,因为插入数据时Blackbird会自动生成自增值。
内容的提问来源于stack exchange,提问作者Justin Hui
相关产品推荐
相关产品推荐

