我正在使用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)
。
答案 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)
}