我在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无法识别类型...
退后一步,简单地从头开始再次编码,就可以正常工作,不需要强制转换...
List(fetchResultsContainer.results, id: \.identifier) { result in
if (result.property == 0) {
//do something
}
}