2016-03-29 14 views
1

Realm kullanıyorum ve Object (NSObject değil), örn.Realm alt sınıfını özel işlev parametresi olarak kullan

realm.objects(Class) 

Ben de parametre olarak Class alır bir işlevi yapmak istiyorum.

Bir sınıf alacak ve Realm işlevine iletecek bir işlev yapmak istiyorum. Böyle bir şey denedim ama çalışmıyor: Pass a Swift class as parameter, and then call a class method out of it

:

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

Swift derleyici burada benzer bir soru bulduk Object.Type

için AnyClass yayın yapamazsanız belirten bir hata bildiriyor

Belki de her sınıf için protokol uygulaması gerektirmeyen daha basit bir çözüm var mı? Fonksiyonun, hangi sınıfa alındığına bağlı olarak kendi başına ne yapacağına karar vermesini istiyorum.

realm.objects(Class) gibi görünmesini istiyorum.

cevap

1

Aynı imzayı kullanabilirsiniz:

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

Yani Realm.Object sınıfının alt türünü kısıtlayan bir genel işlevi gerekir:: objects beyan şöyle Sonra

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

, varsayarak senin sınıfı (bu örnekte MyClass) Realm.Object'dan miras alır, bunu şu şekilde arayabilirsiniz:

class MyClass: Object {} 

test(MyClass) 

senin yöntem bu tür bir nesne alıyorsa, türünü tahmin edebilirsiniz:

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