从swift中的泛型对象中获取element.type

时间:2018-05-20 11:50:23

标签: swift generics realm swift4

我想编写一个通用方法来读取领域中某个类型的所有项目并删除它们。我写了这个:

func deleteAllFromObject<T: Object>(_ object: T) {
    let allUploadingObjects = realm.objects(T.self())

    try! realm.write {
        realm.delete(allUploadingObjects)
    }
}

但我收到的错误是:

  

无法将'T'类型的值转换为预期的参数类型'Object.Type'。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

当前问题是您需要将元数据类型传递给realm.objects而不是实例,因此您不应将括号放在T.self后面,因为括号是{{1}的简写所以不要传入你在init()的实例中传递的类型。

但是,您还应该将函数签名更改为T,因为您希望能够使用func deleteAllFromObject<T: Object>(_ object: T.Type)类型而不是Object子类的实例来调用该函数。

Object

然后调用函数func deleteAllFromObject<T: Object>(_ object: T.Type) { let allUploadingObjects = realm.objects(T.self) try! realm.write { realm.delete(allUploadingObjects) } } 而不是deleteAllFromObject(Dog.self)

答案 1 :(得分:0)

可能是行中的问题

let allUploadingObjects = realm.objects(T.self())

应该是:

let allUploadingObjects = realm.objects(T.self) // removed needles parentheses