gpt4 book ai didi

ios - 如何在不知道哪个实体的情况下在 swift 中声明一个数据类型为实体数组的变量?

转载 作者:行者123 更新时间:2023-11-28 05:50:37 25 4
gpt4 key购买 nike

我正在使用 Xcode 和 CoreData 构建一个 iOS 应用程序。在数据模型中有一些实体,比方说:A、B、C、D、E。

在 homeViewController 中有五个按钮,每个按钮执行到每个实体的 detailTableViewController 的转场。

根据按下哪个按钮,您应该获取相应实体的信息。例如,如果我按下按钮“B”,我应该在 detailTableViewController 中获取“B”实体的数据。

问题来了:如果在按下按钮之前我不知道要推送哪个实体,我如何声明变量“entitiesArray”来存储获取请求结果?在按下按钮之前,我不知道它的数据类型。

如果只有一个实体“A”,我会写:

let entitiesArray = [A]()
let request: NSFetchRequest<A> = A.fetchRequest()
entitiesArray = try context.fetch(request)
...

但是,我不知道将被推送到哪个实体。

在 viewDidLoad 中使用 switch 语句并不能解决问题,因为我需要将 entitiesArray 作为全局变量才能在 numberOfRowsInSection 和 cellForRowAt indexPath 等其他函数中使用它。

最佳答案

通过扩展将其添加到您的上下文中:

func fetchMOs (_ entityName: String, sortBy: [NSSortDescriptor]? = nil, predicate: NSPredicate? = nil) throws -> [NSManagedObject] {

let request = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)

request.returnsObjectsAsFaults = false //as I need to access value
request.predicate = predicate
request.sortDescriptors = sortBy
return try! self.fetch(request) as! [NSManagedObject]
}

然后你可以这样调用它:

let mos = context.fetchMOs(String(describing: yourClassofAorBorCorD))

重点是使用 NSFetchRequest 的便利 init(:entityName) 和结构 NSFetchRequestResultType 作为结果类型。

关于ios - 如何在不知道哪个实体的情况下在 swift 中声明一个数据类型为实体数组的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53126925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com