使用Realm子类作为自定义函数参数

时间:2016-03-29 08:36:07

标签: ios swift realm

我正在使用Realm,它的功能是将一个继承自Object(不是NSObject)的类作为参数,例如

realm.objects(Class)

我想创建一个也以Class为参数的函数。

我想要make函数,它将接受一个类并将其转发给Realm的函数。我试过这样的东西,但它不起作用:

func test(type: AnyClass) {
    let realm = ..
    realm.objects(type)
}

Swift编译器报告错误,指出它无法从AnyClass投射到Object.Type

我在这里找到了类似的问题:Pass a Swift class as parameter, and then call a class method out of it

但也许有一个更简单的解决方案,不需要每个类的协议实现?我希望函数根据它接收的类来决定自己做什么。

我希望它看起来像realm.objects(Class)

1 个答案:

答案 0 :(得分:1)

您可以使用相同的签名:objects声明如下所示:

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

因此,您需要一个通用函数,将类型约束为Realm.Object的子类:

func test<T: Object>(type: T.Type) {
    let realm = ...
    realm.objects(type)
}

然后,假设您的班级(此示例中的MyClass)继承自Realm.Object,您可以这样称呼它:

class MyClass: Object {}

test(MyClass)

如果您的方法采用该类型的对象,则可以推断出类型:

func test<T: Object>(element: T) {
    let realm = ...
    realm.objects(T.self)
}