You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将EnvironmentObject传递给UIViewRepresentable的Coordinator?

解决UIViewRepresentable中传递EnvironmentObject给Coordinator的问题

你要把ToolbarModel这个EnvironmentObject传给DrawingUI,并在Coordinator里更新它的selectedUIColor属性,现在纠结两个标注!!!!的位置该填什么,直接给你解决方案:

步骤1:删掉多余的代码

首先把DrawingUI结构体里的这行代码删掉:

let coordinator = Coordinator(!!!!!)

这行完全没必要,UIViewRepresentable规定通过makeCoordinator()方法创建Coordinator实例,不需要提前定义这个常量。

步骤2:在makeCoordinator里传递EnvironmentObject

把makeCoordinator()方法里的!!!!替换成当前结构体中已有的toolbarModel,代码改成这样:

func makeCoordinator() -> Coordinator {
    return Coordinator(toolbarModel)
}

因为DrawingUI已经通过@EnvironmentObject拿到了toolbarModel,直接把它传给Coordinator的初始化方法就行。

额外优化:去掉冗余属性

你在Coordinator里重复定义了selectedUIColor,其实可以直接复用toolbarModel的属性,减少冗余代码。调整后的Coordinator代码如下:

class Coordinator: NSObject, PKToolPickerObserver {
    private var toolbarModel: ToolbarModel

    // 直接绑定toolbarModel的属性,读写都会同步到环境对象
    var selectedUIColor: UIColor {
        get { toolbarModel.selectedUIColor }
        set { toolbarModel.selectedUIColor = newValue }
    }

    init(_ toolbarModel: ToolbarModel) {
        self.toolbarModel = toolbarModel
    }

    // 你的PKToolPickerObserver实现代码...
}

这样处理后,Coordinator就能正常更新toolbarModel的属性,并且变更会自动同步到整个SwiftUI环境中。

内容的提问来源于stack exchange,提问作者Duck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:12:38