Realm 中为了建立一对多的数据模型关系,需要使用 List。List 在使用上和 Array 非常类似,然而,当我们需要表示 Swift 中的基本类型的时候,坑就来了…
假设我们从服务端获取了一个字段
tags
,这个字段是一个 String 类型的数组,我们的第一反应是这样来建立数据模型:let tags = List<String>()
然而编译器会无情打脸
在 Realm 中,数据类型必须继承自
Object
,这一点都不酷,真的…在查看了很久官方文档之后,得出一个结论,这种写法确实是不行的。于是你必须在为了表示 String 类型,而将 String 在包裹在一个 继承自 Object 的类中,向如下的写法:
class RealmString: Object { dynamic var stringValue = "" }
确实这是目前唯一的解决办法,如果你有更好的解决方案,可以留言。
当然,在我们无法改变结果的时候,就让我们来完善一下过程,将上面的变量声明代码改为:
let _backingTags = List<RealmString>() var tags: [String] { get { return _backingTags.map { $0.stringValue } } set { _backingTags.removeAll() _backingTags.appendContentsOf(newValue.map({ RealmString(value: [$0]) })) } }
上面我们定义了一个计算属性,通过 _backingTags 来作为实际的存储值,然后使用 tags 作为使用的接口,稍微优雅了一点。