在macOS Foundation Swift应用中使用SwiftUI Charts遇报错求助
macOS Foundation应用中SwiftUI Chart无法识别的问题解决
问题描述
用Swift开发macOS Foundation应用时,尝试在NSViewController中使用SwiftUI Chart视图,遇到以下问题:
import Charts语句无法被识别- 编译报错
Cannot find 'Chart' in scope和Cannot find 'LineMark' in scope
补充信息
编辑1
已将项目部署目标改为macOS 13.0+,但报错未解决。
编辑2
尝试以下代码写法后,报错依旧:
var body: some View { Chart { ForEach(entries) { entry in LineMark(x: .value("Time", entry.time), y: .value("Temp", entry.temp)) .foregroundStyle(.red) } } }
原因与解决方法
核心原因
- 纯Foundation应用默认未引入Apple原生SwiftUI Charts框架的依赖,导致编译器无法识别相关类型。
- 可能存在导入语句错误或项目缓存干扰。
解决步骤
- 添加框架依赖
打开项目设置,选中对应target:- 进入「Build Phases」→「Link Binary With Libraries」
- 点击+号,搜索并添加
Charts和SwiftUI框架。
- 修正导入语句
在使用Chart的Swift文件顶部添加正确的导入:import SwiftUI import Charts - 正确嵌入SwiftUI视图到NSViewController
在NSViewController中嵌入SwiftUI Chart视图,需使用NSSwiftUIHostingController,示例代码:class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() let chartHost = NSSwiftUIHostingController(rootView: TemperatureChartView()) addChild(chartHost) view.addSubview(chartHost.view) chartHost.view.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ chartHost.view.topAnchor.constraint(equalTo: view.topAnchor), chartHost.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), chartHost.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), chartHost.view.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) } } struct TemperatureChartView: View { let entries: [TempEntry] = [] // 替换为你的数据 var body: some View { Chart { ForEach(entries) { entry in LineMark(x: .value("Time", entry.time), y: .value("Temp", entry.temp)) .foregroundStyle(.red) } } } } struct TempEntry: Identifiable { let id = UUID() let time: Date let temp: Double } - 清理重建项目
按下Command+Shift+K清理项目缓存,再按Command+B重新编译,解决缓存导致的框架识别异常。
内容的提问来源于stack exchange,提问作者Fry
相关产品推荐
相关产品推荐

