首页 > 解决方案 > 使用@EnvironmentObject 我得到:“不能分配给属性:'viewModel' 是一个只能获取的属性”

问题描述

我得到错误

无法分配给属性:“viewModel”是仅获取属性尝试使用泛型类型的@EnvironmentObject 时。

import SwiftUI
import Combine

protocol HasCount {
    var count: Int { get set }
    var countPublished: Published<Int> { get set }
    var countPublisher: Published<Int>.Publisher { get set }
}

struct SomeView<ViewModelType: ObservableObject & HasCount>: View {
    @EnvironmentObject var viewModel: ViewModelType

    var body: some View {
        return VStack {
            Text("text")
            .onAppear {
                self.viewModel.count = 1
            }
        }
    }
}

知道如何解决这个问题吗?

标签: swiftswiftui

解决方案


您的HasCount协议必须仅限于以下对象

protocol HasCount: AnyObject { // << here !
    var count: Int { get set }
    var countPublished: Published<Int> { get set }
    var countPublisher: Published<Int>.Publisher { get set }
}

推荐阅读