【发布时间】:2023-01-26 23:03:20
【问题描述】:
我无法想出一个很好的方法来问这个问题,所以我将展示一个简单的例子。我有一个模型,@ObservableObject,它包含一个结构:
class MyModel: ObservableObject {
@Published var allData: [TheData] = []
struct TheData: Hashable {
let thePosition: Int
let theChar: Character
}
func initState() {
let allChars = Array("abd")
for (index, element) in allChars.enumerated() {
allData.append(TheData(thePosition: index, theChar: element))
}
}
}
在我看来,我试图从两个不同的结构访问模型(由于恼人的The compiler is unable to type-check this expression in reasonable time..),但我收到一个错误:
struct ContentView: View {
@StateObject var theModel = MyModel()
var body: some View {
VStack {
Image(systemName: "globe")
Text("Hello, world!")
HStack {
ForEach(theModel.allData, id: \.self) { theElement in
letterAcross(myLetter: theElement)
}
}
}
.onAppear {
theModel.initState()
}
.environmentObject(theModel)
}
}
struct letterAcross: View {
@EnvironmentObject var theModel: MyModel
var myLetter: TheData // <----- the ERROR is here
var body: some View {
HStack {
Text(String(myLetter.theChar))
}
}
}
错误是Cannot find type TheData in scope。看来我搞砸了 @StateObject 和 @EnvironmentObject。这样做的正确方法是什么?
【问题讨论】:
-
var myLetter: MyModel.TheData或将TheData置于MyModel的(范围)之外。
标签: swiftui observable