创建不同类型的静态扩展

时间:2016-03-09 23:14:29

标签: swift realm

所以我正在寻找一种从领域访问给定类型的所有对象的好方法。

extension Object {

    static func getAll<T: Object>() -> Results<T>
    {
        let realm = try! Realm()
        let sorts = [SortDescriptor(property: "createdAt")]
        let objects = realm.objects(T).sorted(sorts)
        return objects
    }

}

示例:

class Person: Object {
    dynamic var createdAt = NSDate()
}

然后我想打电话:

Person.GetAll()

问题是这会返回&#34;结果&lt; T&gt;&#34;。但我希望它根据类类型返回结果。所以对于这种情况&#34;结果&lt;人&gt;&#34;。我假设T只是通用对象。

我觉得我真的很亲近,只是还没到那里。

这有意义吗?

2 个答案:

答案 0 :(得分:0)

只有在您提示编译器要返回的类型时才会起作用,例如

let results: Results<Person> = Person.getAll()

但是你无法通过这样的方式定义方法,即你调用它的类将填充类型参数。您需要为此目的使用Self,但最终会出现编译器错误:

  

'Self'仅在协议中可用或作为类中方法的结果;你的意思是'对象'吗?

答案 1 :(得分:-1)

我认为没有任何问题。如果您想获得所要求的类型数组,请执行Person.GetAll().flatMap { $0 }