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

问题描述 投票:0回答:1

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

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

的正确类。

我从xcdatamodeld创建了NSManagedObject子类(编辑器->创建NSManagedObject子类...。)>

NSManagedObject子类是在Objective-c中创建的,我在桥接头中添加了.h文件。

我在项目的其余部分中使用NSManagedObject子类都没有问题。我什至可以在同一Struct中创建该Type的属性,如下所示:

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还是很新的。感谢您的帮助。

我在SwiftUI中获得了ListView,并希望根据给定的属性生成RowView。因此,我想检查ForEach循环中元素的属性。 Xcode无法识别类型...

objective-c swift swiftui nsmanagedobject swift5.2
1个回答
0
投票

退后一步,简单地从头开始再次编码,就可以正常工作,不需要强制转换...

List(fetchResultsContainer.results, id: \.identifier) { result in
    if (result.property == 0) {
    //do something
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.