我在SwiftUI中获得了一个 ListView,并希望根据给定的属性生成 RowViews。因此我想检查ForEach循环中元素的属性。
Xcode 无法识别元素的类型,这就是为什么我想将元素转换为正确的 Class ,即NSManagedObject Subclass。
我从 xcdatamodeld (Editor -> Create NSManagedObject Subclass...) 创建了 NSManagedObject 子类。
NSManagedObject 子类是在objective-c 中创建的,我将.h 文件添加到桥接头。
我在项目的其余部分中使用 NSManagedObject 子类没有问题。我什至可以在同一个 Struct 中创建该类型的属性,如下所示:
struct MyListView: View {
var test : MyNSManagedObjectSubclass //Xcode does recognize it here
由于某种原因,Xcode 无法识别 ForEach 循环内的 NSManagedObject 子类。
代码如下:
struct MyListView: View {
var test : MyNSManagedObjectSubclass //Xcode does recognize it here
@EnvironmentObject private var fetchResultsContainer : FetchedResultsContainer
var body: some View {
NavigationView{
VStack{
ForEach(fetchResultsContainer.results , id: \.identifier) { result in
if let castedResult = result as! MyNSManagedObjectSubclass { //Xcode does not recognize it here
if castedResult.property{
ResultRowView(input: result)
}
}
}
}
}
}
}
FetchedResultsContainer:
@objc class FetchedResultsContainer : NSObject, ObservableObject{
@objc @Published var results: [MyNSManagedObjectSubclass]()
@objc static let sharedInstance: FetchedResultsContainer = {
let instance = FetchedResultsContainer()
return instance
}()
}
我觉得我错过了一些明显的东西,因为我对 Swift 和 SwiftUI 还是很陌生。感谢你的帮助。