无法将ForEach循环中的元素强制转换为NSManagedObject子类SwiftUI



我在SwiftUI中得到了一个ListView,并希望根据给定的属性生成RowViews。因此,我想检查ForEach循环中元素的属性。

Xcode无法识别元素的类型,这就是为什么我想将元素强制转换为正确的Class,即NSManagedObject子类

我从xcdatamodeld创建了NSManagedObject子类(编辑器->创建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)
}
}
}
}
}
}
}

获取结果容器:

@objc class FetchedResultsContainer : NSObject, ObservableObject{
@objc @Published var results: [MyNSManagedObjectSubclass]()
@objc static let sharedInstance: FetchedResultsContainer = {
let instance = FetchedResultsContainer()
return instance
}()
}

我觉得我错过了一些显而易见的东西,因为我对Swift和SwiftUI还很陌生。感谢你的帮助。

好的,在后退一步并简单地从头开始重新编码后,它只起了作用,不需要铸造。。。

List(fetchResultsContainer.results, id: .identifier) { result in
if (result.property == 0) {
//do something
}
}

我认为铸件不起作用的假设是不正确的。我可能检查了result.property == false,而property的类型是NSNumber,它给出了一些奇怪的编译错误,导致我走上了错误的道路。

最新更新