【问题标题】:SwiftUI: Cannot find type in scopeSwiftUI:在范围内找不到类型
【发布时间】: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


【解决方案1】:

它是一个嵌套类型,所以它是MyModel.TheData:

var myLetter: MyModel.TheData

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2021-09-21
    • 2021-08-01
    • 2022-01-16
    • 2021-08-03
    相关资源
    最近更新 更多