Swift库中的数组问题 - Realm 2.4.1

时间:2017-01-30 22:47:07

标签: arrays swift object realm

我对领域数据库有一个奇怪的问题。

是否无法从领域数据数组中的对象中提取数据?

制作简单的物体时,就像这样:

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.这在所有模拟器中都会发生。 我明白也许这是我的错,所以如果你能帮助我解决这个问题,我会很高兴!

1 个答案:

答案 0 :(得分:0)

必须使用dynamic修饰符声明内置类型(字符串,整数等)的属性,以使Realm Swift能够提供从底层Realm文件中检索值的getter。如果没有dynamic修饰符,Swift编译器将生成对底层实例变量的访问,该变量不包含从Realm文件加载的对象的任何数据。