Contentful Management API中Reference字段的Swift调用格式问题
问题原因
报错是因为item.fields.linkedEntries(at:)返回的是Contentful SDK原生的[Entry]类型数组,无法直接赋值给你自定义的[HPtvSeriesEpisodes]类型属性,需要手动做类型映射转换。
解决步骤
- 先给你的
HPtvSeriesEpisodes结构体添加一个从Entry类型初始化的方法,示例如下:
struct HPtvSeriesEpisodes: Identifiable { var id = UUID() // 你自己定义的所有属性,示例如下 var episodeTitle: String var episodeDescription: String var episodePlayUrl: URL // 新增Entry转模型的初始化方法 init(from entry: Entry) { self.episodeTitle = entry.fields["episodeTitle"] as! String self.episodeDescription = entry.fields["episodeDescription"] as! String self.episodePlayUrl = entry.fields["playUrl"] as! URL // 把你所有属性按照Contentful后台对应的字段ID逐一赋值即可 } }
- 替换你原来注释的episodes赋值代码,用
map方法把每个Entry转为你的自定义模型:
// 基础写法,确定episode字段必然有值时使用 episodes: item.fields.linkedEntries(at: "episode").map { HPtvSeriesEpisodes(from: $0) } // 安全可选写法,避免episode字段为空时崩溃 episodes: (item.fields.linkedEntries(at: "episode") ?? []).map { HPtvSeriesEpisodes(from: $0) }
注意事项
- 调用
linkedEntries(at:)时传入的字段ID要和Contentful后台你设置的Reference字段ID完全一致,大小写敏感 HPtvSeriesEpisodes的init方法里,取值用的字段ID也要和Contentful后台单集条目的字段ID完全对应- 如果单集条目里还有嵌套的Reference字段,按照同样的逻辑在对应模型的init方法里处理即可
内容的提问来源于stack exchange,提问作者Kevon Brown
相关产品推荐
相关产品推荐

