gpt4 book ai didi

swift - 如何在 swift 中模拟 realm-cocoa

转载 作者:可可西里 更新时间:2023-11-01 02:15:32 26 4
gpt4 key购买 nike

我正在使用 realm-cocoa对于我的持久层。有一个类取决于 realm

class RealmMetaData : AbstractMetaData {
var realm: RealmInterface
var isFirstLaunch: Bool = false
init(realm: RealmInterface = try! Realm()) {
self.realm = realm
let results = realm.objects(MyClass.self)
self.isFirstLaunch = (results.count == 0)
if (self.isFirstLaunch) {
realm.write {
realm.add(MyClass())
}
}
}
// some code
}


protocol RealmInterface {
// using a protocol based approach of mocking
func objects<T: Object>(type: T.Type) -> Results<T>
func write(@noescape block: (() throws -> Void)) throws
func add(object: Object)
}

extension Realm: RealmInterface {
func add(object: Object) { self.add(object, update: false) }
// there is a method for Realm with signature: add(object:Object, update:Bool = false)
// but swift extension dose not permit default function parameter, hence the wrapping
}

然后在我的测试代码中,我可以编写 RealmInterface 的模拟版本并将其注入(inject) RealmMetaData使用 Constructor Injection 的实例.

在实现模拟 RealmInterface 时,我发现很难模拟 objects函数返回一个空列表。因为函数签名的返回类型Results<T>Realm Framework 提供的类型并且没有可用的空构造函数。这就是我卡住的地方。

那个Result<T>是一个类 final关键字,所以我也不能将它子类化以使用它的私有(private)方法来获取空集合。

提前致谢!

最佳答案

正如我在评论中所建议的那样,您可以在测试类中使用内部内存 Realm 并转发所有返回 Result<T> 的方法。

关于swift - 如何在 swift 中模拟 realm-cocoa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38952935/

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