gpt4 book ai didi

ios - 连接 Realm 和 SwiftBond 的最佳方式是什么

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:58 25 4
gpt4 key购买 nike

我爱Realm我爱Bond .它们都使应用程序创建成为一种乐趣。所以我想知道连接 Realm 和 Bond 的最佳方式是什么?
在Realm中我们可以存储基本类型,如IntString,例如但在 Bond 中,我们使用 DynamicBond。我发现连接 Realm 和 Bond 的唯一方法如下:

class TestObject: RLMObject {

dynamic var rlmTitle: String = ""
dynamic var rlmSubtitle: String = ""

var title: Dynamic<String>
var subtitle: Dynamic<String>

private let titleBond: Bond<String>!
private let subtitleBond: Bond<String>!

init(title: String, subtitle: String) {
self.title = Dynamic<String>(title)
self.subtitle = Dynamic<String>(subtitle)

super.init()

self.titleBond = Bond<String>() { [unowned self] title in self.rlmTitle = title }
self.subtitleBond = Bond<String>() { [unowned self] subtitle in self.rlmSubtitle = subtitle }

self.title ->> titleBond
self.subtitle ->> subtitleBond
}
}

但它确实缺乏简洁和优雅,并且会产生大量的锅炉代码。有什么办法可以做得更好吗?

最佳答案

有了支持 KVO 和 Bond 4 的 Realm,您可以扩展 Realm 对象以提供 Observable 变体。它有一些样板,但很干净,没有黑客攻击。

class Dog: Object {
dynamic var name = ""
dynamic var birthdate = NSDate(timeIntervalSince1970: 1)
}

extension Dog {

class ObservableDog {
let name: Observable<String>
let birthdate: Observable<NSDate>

init(dog: Dog) {
name = Observable(object: dog, keyPath: "name")
birthdate = Observable(object: dog, keyPath: "birthdate")
}
}

func observableVariant() -> Dog.ObservableDog {
return ObservableDog(dog: self)
}
}

你可以做到:

let myDog = Dog().observableVariant()

myDog.name.observe { newName in
print(newName)
}

myDog.name.bindTo(nameLabel.bnd_text)

realm.write {
myDog.name.value = "Jim"
}

关于ios - 连接 Realm 和 SwiftBond 的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29155556/

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