我们发现我们的项目有很多围绕基本 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/