Swift Charts 报错:Initializer ... requires that .. conform to ‘Identifiable‘
1. 问题描述#
在运行Swift Charts官方折线图示例时,出现了如下错误。
Initializer ‘init(_:content:)’ requires that ‘ContentView.MonthlyHoursOfSunshine’ conform to ‘Identifiable’
官方文档中的示例程序如下所示。
import SwiftUI
import Charts
struct ContentView: View {
struct MonthlyHoursOfSunshine {
var date: Date
var hoursOfSunshine: Double
init(month: Int, hoursOfSunshine: Double) {
let calendar = Calendar.autoupdatingCurrent
self.date = calendar.date(from: DateComponents(year: 2020, month: month))!
self.hoursOfSunshine = hoursOfSunshine
}
}
var data: [MonthlyHoursOfSunshine] = [
MonthlyHoursOfSunshine(month: 1, hoursOfSunshine: 74),
MonthlyHoursOfSunshine(month: 2, hoursOfSunshine: 99),
// ...
MonthlyHoursOfSunshine(month: 12, hoursOfSunshine: 62)
]
var body: some View {
Chart(data) {
LineMark(
x: .value("Month", $0.date),
y: .value("Hours of Sunshine", $0.hoursOfSunshine)
)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
2. 解决办法#
解决办法是将MonthlyHoursOfSunshine结构修改为Identifialbe,修改后的代码如下所示。
import SwiftUI
import Charts
struct ContentView: View {
struct MonthlyHoursOfSunshine:Identifiable {
id = UUID()
var date: Date
var hoursOfSunshine: Double
init(month: Int, hoursOfSunshine: Double) {
let calendar = Calendar.autoupdatingCurrent
self.date = calendar.date(from: DateComponents(year: 2020, month: month))!
self.hoursOfSunshine = hoursOfSunshine
}
}
作者:realxuan
出处:https://www.cnblogs.com/realxuan/p/17644651.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律