2016-03-29 7 views
1

私はレルムを使用しており、ObjectNSObjectではなく)から継承するクラスを引数として取る関数を持っています。レルムサブクラスをカスタム関数パラメータとして使用

realm.objects(Class) 

Classというパラメータをパラメータとして使用したいと考えています。

クラスを受け取り、それをレルムの関数に転送するmake関数が必要です。私はこのような何かを試してみましたが、それは動作しません:Pass a Swift class as parameter, and then call a class method out of it

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

スウィフトコンパイラは、私がここに同様の質問を見つけ、それがObject.Type

AnyClassからキャストすることはできませんというエラーを報告します

しかし、おそらく、すべてのクラスのプロトコル実装を必要としない単純なソリューションがありますか?私は、関数が受け取るクラスに応じて、何をするのかを決める機能を望みます。

realm.objects(Class)のようにしたいと思います。

答えて

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) 
} 
関連する問題