如何为Realm对象实现支持任意类的通用GET方法?
实现Realm通用数据获取方法
我来帮你把Realm_manager的getObjects改成支持任意Realm模型类的通用方法,核心是利用Swift的泛型特性,结合Realm模型的基类Object做类型约束:
改造后的Realm_manager代码
import RealmSwift class Realm_manager { private init() {} static let shared = Realm_manager() // 改成计算属性获取Realm实例,避免多线程操作的潜在问题 private var realm: Realm { do { return try Realm() } catch { fatalError("Realm初始化失败: \(error)") } } // 通用的获取对象方法,支持任意Realm模型类 func getObjects<T: Object>(_ type: T.Type) -> [T] { let result = realm.objects(type) return Array(result) } }
关键改动说明
- 给方法添加泛型参数
T,并通过<T: Object>约束它必须是Realm的Object子类(所有Realm模型都继承自这个类) - 方法参数接收
T.Type类型,也就是你要获取的模型类的类型(比如customType.self) - 返回值改成
[T],调用时会自动推断出对应模型类型的数组,无需手动转换
另外补充个小细节:我把原来全局存储的realm实例改成了计算属性,因为Realm实例是线程绑定的,全局存储可能会在多线程操作时引发异常,用计算属性能确保每次获取的都是当前线程的有效实例,更安全。
调用示例
现在不管是customType还是其他Realm模型类,都可以用同一个方法获取数据:
// 获取customType类型的数据 let customItems = Realm_manager.shared.getObjects(customType.self) myArray.append(contentsOf: customItems) // 换另一个模型类AnotherType也能直接用 let anotherItems = Realm_manager.shared.getObjects(AnotherType.self) myAnotherArray.append(contentsOf: anotherItems)
内容的提问来源于stack exchange,提问作者faris97
相关产品推荐
相关产品推荐

