swift - Realm 对象的通用集合

标签 swift realm

我们发现我们的项目有很多围绕基本 ListView Controller 的 Realm 对象集合的重复/样板代码,并且想知道是否有一些通用容器可以将它们封装在其中。

似乎 AnyRealmCollection 与该概念隐约相关,我发现了这个 old/spuriously sourced link还有这个stackoverflow post它基本上完全符合我的要求,但该语法肯定不再有效。我的目标基本上如下(请原谅我的伪代码)

class ParentController: UITableViewController {
  var dataSource: GenericRealmCollection!
  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dataSource.count
  }
}

class ChildController: ParentController {
  func viewDidLoad() {
    dataSource = realm.objects(MyModel.self).filter(...)
  }
}

我猜有一些我不完全理解的快速类型删除功能可以适应这种情况,但我整个下午都在玩它,但没有取得太大进展。

更新 1

看起来 AnyRealmCollection 绝对不是我基于 @kishikawa-katsumi 所期待的的解释。正如我在评论中提到的,这样做会强制使用类泛型,这确实限制了与 Obj-C 的互操作性。我的希望是完全删除该类型(或者至少返回到Object,然后在需要对象时使用辅助函数来转换为正确的类型。看起来这可能是不可能的。

最佳答案

AnyRealmCollection<T>按以下方式使用。

class ParentController<T: Object>: UITableViewController {
    var dataSource: AnyRealmCollection<T>!
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataSource.count
    }
}

class ChildController: ParentController<MyModel> {
    override func viewDidLoad() {
        super.viewDidLoad()
        dataSource = AnyRealmCollection(realm.objects(MyModel.self))
    }
}

关于swift - Realm 对象的通用集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39863680/

相关文章:

当我设置新字体时,iOS 导航栏不改变颜色

ios - iOS 应用程序或 Playground 中的 Process 是否始终未解决?

.net - Realm for Xamarin 中的简单迁移

ios - 使用 Realm 或 UserDefaults 存储经过身份验证的用户数据?

swift - 为什么 UIViews 背景颜色没有更新?

iOS 模拟器不将层渲染为真实设备

ios - iOS Realm 迁移内存泄漏

swift - Swift 关系中的 Realm 不添加行

ios - SwiftUI 中的多行 TextView

swift - Realm Swift 代码用于查询/添加具有关系的 3 个深表中的记录