Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 创建不同类型的静态扩展_Swift_Realm - Fatal编程技术网

Swift 创建不同类型的静态扩展

Swift 创建不同类型的静态扩展,swift,realm,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

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

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
    }

}
然后我想打电话:

Person.GetAll()
问题是它返回“Results”。但是我希望它根据类类型返回结果。。所以对于这个案例,“结果<人>”。我假设T只是泛型对象

我觉得我真的很接近了,只是还没有完全达到


这有意义吗?

我看不出有什么问题。如果您想获得所请求类型的数组,只需执行
Person.GetAll().flatMap{$0}

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

let results: Results<Person> = Person.getAll()
let results:results=Person.getAll()
但是,您不能以这样的方式泛型地定义方法,即您正在调用它的类将填充类型参数。为此,您需要使用
Self
,但这将导致编译器错误,如下所示:

“Self”仅在协议中可用,或作为类中方法的结果;你是说“物体”吗


你所要求的没有道理。更多阅读,请查看。如果我在我的对象中添加了协议,该怎么办?我将如何实现它,以便只需要在模型类中返回类似“let type=Person.self”的内容?
let results: Results<Person> = Person.getAll()