mik*_*sis 8 arrays realm ios swift
我是Realm中的新手,我尝试添加一个数组,就像我使用字符串一样,我最终遇到了一些错误.经过一番搜索,我发现了一个解决方案:
class Sensors : Object {
dynamic var name = ""
dynamic var message = ""
var topic: [String] {
get {
return _backingNickNames.map { $0.stringValue }
}
set {
_backingNickNames.removeAll()
_backingNickNames.append(objectsIn: newValue.map({ RealmString(value: [$0]) }))
}
}
let _backingNickNames = List<RealmString>()
override static func ignoredProperties() -> [String] {
return ["topic"]
}
}
class RealmString: Object {
dynamic var stringValue = ""
}
Run Code Online (Sandbox Code Playgroud)
这工作得非常好,现在我想在这个类中添加另一个数组.如果有人知道使用领域添加数组的任何其他方法,请分享它.
提前致谢
Bog*_*rca 17
作为一般规则,使用Realm提供的一对多关系而不是尝试通过使用数组来模拟它们更有效(Realm的集合是惰性的,包含的对象仅在需要时实例化,而不是普通的Swift数组) .
在您的情况下,如果我正确理解您要执行的操作,则需要将[RealmString]
Swift数组添加到_backingNickNames
列表中.
为什么不使用append(objectsIn:)
Realm List
类的方法(见这里),如下所示:
// Dog model
class Dog: Object {
dynamic var name = ""
dynamic var owner: Person?
}
// Person model
class Person: Object {
dynamic var name = ""
dynamic var birthdate = NSDate(timeIntervalSince1970: 1)
let dogs = List<Dog>()
}
let jim = Person()
let dog1 = Dog()
let dog2 = Dog()
// here is where the magic happens
jim.dogs.append(objectsIn: [dog1, dog2])
Run Code Online (Sandbox Code Playgroud)
如果你想做相反的事情(从List转换为数组),只需:
let dogsArray = Array(jim.dogs)
Run Code Online (Sandbox Code Playgroud)
•••••••
回到您自己发布的解决方案,您可以轻松地重构模型以适应这种情况.每个Sensor
对象可以附加几个Topic
和几个Message
对象.
只要沟message
和topic
计算性能,并重新命名topicV
,并messageV
以topics
和messages
分别.也改名RealmString
来Topic
和RealmString1
到Message
.
现在,您可以轻松地遍历连接到传感器的主题,例如:
for topic in sensor1.topics { ... }
Run Code Online (Sandbox Code Playgroud)
或者,如果要将消息附加到传感器,可以执行以下操作(不要忘记先将新创建的对象正确添加到数据库中):
let message1 = Message()
message1.stringValue = "Some text"
sensor2.messages.append(message1)
Run Code Online (Sandbox Code Playgroud)
所以,不需要使用中间Swift阵列.
归档时间: |
|
查看次数: |
12746 次 |
最近记录: |