我对领域数据库有一个奇怪的问题。
是否无法从领域数据数组中的对象中提取数据?
制作简单的物体时,就像这样:
import Foundation
import RealmSwift
class Dog: Object {
var index = 0
var day = ""
}
之后,您将列出具有当前类型的对象:
var dog1 = Dog()
var dog2 = Dog()
var dog3 = Dog()
dog1.day = "one day"
dog1.index = 0
dog2.day = "two day"
dog2.index = 1
dog3.day = "three day"
dog3.index = 2
try! realm.write {
realm.add(dog1)
realm.add(dog2)
realm.add(dog3)
}
然后,您获得了这些对象的列表,但是从Realm中,您无法从这些对象中获取数据。
让我们看看......
var dogs = realm.objects(Dog.self)
//从领域获取已创建对象的列表
print("All Dogs",dogs)
//输出:
All Dogs Results<Dog> (
[0] Dog {
index = 0;
day = one day;
},
[1] Dog {
index = 1;
day = two day;
},
[2] Dog {
index = 2;
day = three day;
})
//一切都好 //
之后的3个命令和3个输出 print("Dog 1",dogs[0])
print("Dog 2",dogs[1])
print("Dog 3",dogs[2])
//三个输出 //输出1
Dog 1 Dog {
index = 0;
day = one day;
}
//输出2
Dog 2 Dog {
index = 1;
day = two day;
}
//输出3
Dog 3 Dog {
index = 2;
day = three day;
}
//鞋面好,但现在问题开始了
print("Dog 1 day : ",dogs[0].day)
//输出
Dog 1 day :
//下一步
print("Dog 2 day : ",dogs[1].day)
//输出:
Dog 2 day :
//下一步
print("Dog 3 day : ",dogs[2].day)
//输出
Dog 3 day :
//在上面的三个命令中都是坏的
//让我们尝试另一种方式
print("Dog 1 day : ", realm.objects(Dog.self).first?.day)
//输出
Dog 1 day : Optional("")
//这种方式也没给我任何好的
//最后一个看到这个问题的方法:
let dogss = try! Realm().objects(Dog.self)
for i in 0..<2 {
let dog = dogss[i]
print("Dog : ", dog,"\n\n\n\n")
print("And just dog day : ", dog.day)
// ...
}
//预期输出:
Dog : Dog {
index = 0;
day = one day;
}
And just dog day : one day
Dog : Dog {
index = 1;
day = two day;
}
And just dog day : two day
//但我们有
Dog : Dog {
index = 0;
day = one day;
}
And just dog day :
Dog : Dog {
index = 1;
day = two day;
}
And just dog day :
后记:
所以,我使用Xcode 8.2.1,swift 3.这在所有模拟器中都会发生。 我明白也许这是我的错,所以如果你能帮助我解决这个问题,我会很高兴!
答案 0 :(得分:0)
必须使用dynamic
修饰符声明内置类型(字符串,整数等)的属性,以使Realm Swift能够提供从底层Realm文件中检索值的getter。如果没有dynamic
修饰符,Swift编译器将生成对底层实例变量的访问,该变量不包含从Realm文件加载的对象的任何数据。