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

2024-06-28

I love Realm http://realm.io我爱Bond https://github.com/SwiftBond/Bond。两者都让应用程序创建成为一种乐趣。所以我想知道连接 Realm 和 Bond 的最佳方式是什么?
在 Realm 中我们可以存储基本类型,例如Int, String,例如但在邦德我们合作的是Dynamics and Bonds。我发现连接 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
   }
}

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


通过 Realm 支持 KVO 和 Bond 4,您可以扩展 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"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接 Realm 和 SwiftBond 的最佳方式是什么 的相关文章

随机推荐

  • 点 -> 像素 iText (im)精度

    好的 这是一些代码 pdfDocument is a com itextpdf text Document PdfPTable table new PdfPTable 1 PdfPCell cell new PdfPCell cell se
  • 库存推文、文本挖掘、表情符号错误

    我希望您能够协助进行文本挖掘练习 我对 AAPL 推文感兴趣 并且能够从 API 中提取 500 条推文 我自己克服了几个障碍 但最后一部分需要帮助 由于某种原因 tm 包没有删除停用词 您能看一下可能是什么问题吗 表情符号会引起问题吗 绘
  • 在 FragmentStatePagerAdapter 中保存状态和恢复状态

    我正在使用ViewPager with FragmentStatePageAdapter我的屏幕上有 5 个页面 其中有大量图像和视图 目前我有mViewPager setOffscreenPageLimit 1 所以只有当前 上一个和下一
  • 如何准备图像分类的训练数据

    我是机器学习新手 在图像分类方面遇到一些问题 使用简单的分类器技术 K 最近邻居 我试图区分猫和狗 到目前为止我的代码 import pandas as pd import numpy as np import seaborn as sns
  • alloc 和 init 他们实际做了什么

    有人可以向我解释一下 init 和 alloc 在 Obj C 中的作用吗 我正在阅读这本 obj c 书 其中给出了创建对象的示例 但它并没有真正详细介绍它的作用 alloc返回什么 init 返回什么 Animal k Animal a
  • Windows 卷曲批处理文件

    我想使用 Windows 批处理文件进行 mailgun 卷曲调用 由于Windows shell不支持多行 如何在Windows批处理文件中执行以下curl函数 curl s user api key xxxxxxxxxx https a
  • pandas 中任意列表的笛卡尔积[重复]

    这个问题在这里已经有答案了 给定任意数量的列表 我想生成一个 pandasDataFrame作为笛卡尔积 例如 给定 a 1 2 3 b val1 val2 c 100 101 我想最终得到一个DataFrame有柱子a b and c 以
  • & 运算符在函数指针赋值中可选

    在下面的代码中 mylog c include
  • 在 pandas 数据框中进行 groupby 后滚动前 3 个月的唯一计数

    以下是数据框 Date Name data 01 01 2017 Alpha A 02 01 2017 Alpha A 03 01 2017 Alpha B 01 01 2017 Beta A 01 20 2017 Beta D 03 01
  • 从 r 中的数据帧中删除每第 n 列

    我试图通过删除每第三列来减小数据框的大小 这是我的示例数据框 example data frame x c 1 2 3 4 y c 1 2 3 4 z c 1 2 3 4 w c 1 2 3 4 p c 1 2 3 4 q c 1 2 3
  • Eclipse RCP 应用程序 - 自定义启动屏幕

    我目前正在开发一个 Eclipse RCP 应用程序 在其中我尝试实现一个自定义启动屏幕处理程序 显示一个进度条 行为类似于您可以在 product 定义中定义的默认进度条 和多个循环背景图像 以这种方式编辑主应用程序插件的扩展后
  • 在许多客户之间共享大量集合时,Meteor 的效率如何?

    想象一下以下情况 1 000 个客户端连接到显示 Somestuff 集合内容的 Meteor 页面 Somestuff 是一个包含 1 000 件物品的集合 有人将新项目插入 Somestuff 集合中 会发生什么 All Meteor
  • Ruby 中神奇的 $ 前缀变量是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我见过 Ruby 中使用这样的神奇变量 0 是否有完整的参考来说明它们的含义以及它们的设置方式 他们的
  • Kotlin:具有多个不同类型的设置器的单个属性

    我正在尝试建立一个具有以下属性的类LocalDatetype 具有接受不同类型的设置器 LocalDate or String 的情况下LocalDate 该值被直接赋值 如果String 它被解析然后分配 在Java中 我只需要实现两个重
  • Bootstrap - navbar-fixed-top 覆盖内容

    我有一个关于 navbar fixed top 的问题 嗯 我有一个简单的问题 我的固定导航栏覆盖内容 例如在 关于我们 页面中 它覆盖带有 关于我们 标题的行 我不知道如何修复它 因为当我调整网站大小 移动设备大小 时 标题是可见的 当然
  • Flexbox 无法在 Safari 中工作,在 Web 检查器中被删除

    我在用着display flexbox对于包含多个正方形的 div 容器 使它们水平对齐 它在 Chrome 中工作正常 但在 Safari 8 0 中却不行 它被删除了 如下所示 grid overflow x hidden overfl
  • NSURLConnection didSendBodyData 进度

    我正在使用 POST 请求将一些数据上传到服务器 并且我正在尝试根据以下内容更新 UIProgressView 的进度totalBytesWritten的财产didSendBodyData的方法NSURLConnection 使用下面的代码
  • 将 YAML 文件作为常量加载到 Rails 控制器中是否有效?

    我有几个大型数组需要可用于特定视图 目前 我将它们存储在 YAML 文件中并加载到控制器常量中 如下所示 我假设当 Rails 在环境设置期间加载文件时 这个常量存储在内存中 但我偏执地想知道每次访问该控制器时是否都在访问文件系统 谁能建议
  • MySQL 将所有空格替换为 -

    我怎样才能删除一行中的所有空格 我在这里看到很多相同的问题 但所有答案都使用替换选项 替换只能去除一个空格 而不是全部 例如 a b c 变为 a b c Thanks 这可以通过以下 MySQL 函数来实现 SELECT REPLACE
  • 连接 Realm 和 SwiftBond 的最佳方式是什么

    I love Realm http realm io我爱Bond https github com SwiftBond Bond 两者都让应用程序创建成为一种乐趣 所以我想知道连接 Realm 和 Bond 的最佳方式是什么 在 Realm