2016-03-29 146 views
1

我使用境界及它具有取作爲參數的一類從Object(未NSObject)繼承功能,例如使用境界子類作爲自定義函數參數

realm.objects(Class) 

我想做一個功能,也需要Class作爲參數。

我想讓功能,將需要一個類,並將其轉發到Realm的功能。我想這樣的事情,但它不工作:

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

雨燕編譯器報告一個錯誤,指出它不能從AnyClass轉換爲Object.Type

我發現了一個類似的問題在這裏:Pass a Swift class as parameter, and then call a class method out of it

但也許有一個更簡單的解決方案,不需要每個類的協議實現?我希望函數根據它接收的類別自行決定做什麼。

我希望它看起來像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) 
} 
相關問題