我想在 Realm Swift 数据库中存储格式化文本

I want to store formatted text in Realm Swift database

菜鸟 swift 这里的家伙。 我有这个 UITextView,用户可以在其中写东西。我需要将他的“笔记”存储到数据库中,其中包含所有格式化的文本。这意味着如果它有粗体,我需要稍后将其显示为粗体。 此文本应存储在本地领域 Swift 数据库中。任何解决方案我该如何实现?我想到了“Markdown”,但我不明白它有什么用。

非常感谢!祝你有美好的一天!

Realm 只存储 ascii 文本,不能直接存储任何格式属性,如 BOLD,这对大多数数据库都是如此。

如果你想存储格式化的字符串,一种选择是将其归档为 Data 类型,Realm 完全支持这种类型。然后,当读回数据时,将其从 Data 解档回格式化字符串。 (格式化字符串通常称为 Rich Text 或在代码中:attributedStrings)

下面的代码是 macOS 但 iOS 会相似

一个简单的例子 - 这是一个 class 来保存一些属性字符串数据

class MyAttrStringClass: Object {
   @Persisted var attrStringData: Data!
}

假设我们有一个包含以下文本的(富文本)字段

你好,世界

要在 Realm 中存储带有属性字符串的 class:

let s = self.myRichTextField.attributedStringValue
let data = try! NSKeyedArchiver.archivedData(withRootObject: s, requiringSecureCoding: false)

let myObject = MyAttrStringClass()
myObject.attrStringData = data

try! realm.write {
    realm.add(myObject)
}

然后当从 Realm 读回并在同一字段中显示属性字符串时

let myObject = realm.objects(MyAttrStringClass.self).first!

let data = myObject.attrStringData!
let s = try! NSKeyedUnarchiver.unarchivedObject(ofClass: NSAttributedString.self, from: data)

self.myRichTextField.attributedStringValue = s!

注意:上面没有任何错误检查。请通过安全地解包可选来保护您的代码。