为什么 swiftui 无法区分 2 个不同的环境对象?

Chr*_*ris 6 swiftui

我有这段代码,并希望 ab 作为文本。

结果:aa -> 参见屏幕截图。我究竟做错了什么?

import SwiftUI

class PublishString : ObservableObject {

    init(string: String) {
        self.string = string
        print(self.string)
    }

    @Published var string : String = "a"
}

struct ContentView: View {

    @EnvironmentObject var text1 : PublishString
    @EnvironmentObject var text2 : PublishString

    var body: some View {
        VStack {
            Text(text1.string)
            Text(text2.string)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environmentObject(PublishString(string: "a"))
        .environmentObject(PublishString(string: "b"))
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

并且......这有效:

class PublishString : ObservableObject {

    init(string: String) {
        self.string = string
        print(self.string)
    }

    @Published var string : String = "a"
}

class PublishString2 : ObservableObject {

    init(string: String) {
        self.string = string
        print(self.string)
    }

    @Published var string : String = "a"
}

struct ContentView: View {

    @EnvironmentObject var text1 : PublishString
    @EnvironmentObject var text2 : PublishString2

    var body: some View {
        VStack {
            Text(text1.string)
            Text(text2.string)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 3

正如Asperi在评论中指出的那样,SwiftUI 通过类型(您使用的类定义)来识别环境对象。它查找该类型的对象并使用找到的第一个对象。

一种选择是在一个可以访问的对象上拥有多个属性(这意味着String在您的情况下有两个单独的属性。

更多信息请参阅 Apple文档