【问题标题】:Realm Results object type领域结果对象类型
【发布时间】:2016-04-07 20:06:36
【问题描述】:

这真的很基础,但我只是找不到如何使用 Swift 从 Realm 数据库中获取所有类型的对象。是的,是的:

var dogs = try! Realm().objects(Dog)

但是如果我想事先声明和初始化dogs 变量并稍后将对象加载到其中怎么办?喜欢:

var dogs = ???
dogs = realm.objects(Dog)

在这种情况下,可变狗的类型应该是什么?

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    Realm.objects(_:) 具有以下签名:

    public func objects<T: Object>(type: T.Type) -> Results<T>
    

    签名告诉你,当你以realm.objects(Dog) 调用函数时,返回类型将为Results&lt;Dog&gt;

    如果您希望声明变量并稍后在同一个函数中对其进行初始化,您可以简单地将声明与初始化分开,如下所示:

    let dogs: Results<Dog>
    
    // …
    
    dogs = realm.objects(Dog)
    

    如果你声明一个成员变量并且需要在init之后初始化它,你应该声明为一个可选并且使用var

    var dogs: Results<Dog>?
    
    // …
    
    dogs = realm.objects(Dog)
    

    【讨论】:

    • 谢谢。我为此浪费了一个小时十分钟。有人想知道为什么 Realm 文档会在其最基本的示例中使用类型推断,例如网站墨水很昂贵之类的。
    • Realm 文档尝试使用惯用的 Swift。在许多情况下,添加显式类型信息会掩盖可读性而不是帮助。 API 参考文档包含有关所涉及类型的详细信息。
    【解决方案2】:

    除了结果,您还可以使用列表。如果您在 One:Many 示例中返回对象,这将非常有用。

    如果您有两个模型 Country 和 City,其中一个 Country 可以有多个城市。

    var rlmCountry: Country!
    var rlmCities: List<City>?
    
    rlmCities = rlmCountry.cities
    

    【讨论】:

    • 是的,强迫任何事情都不好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多