2016-09-26 49 views
0

我剛開始使用Realm的swift框架,並不確定是否遺漏了某些東西,但我認爲通過領域的API查詢數據的方式非常麻煩,所以我想爲它寫一個幫助函數。Swift:與嵌套泛型助手函數相關的問題

但是當我玩它的泛型函數時,我遇到了一些問題。

因此,這裏的輔助函數:

static func queryFromRealm<T: Object>(object: T, query: String) -> Results<T> { 
     let realm = try! Realm() 
     return realm.objects(T.self).filter(query) 
} 

realm.objects(類型:)是境界的功能,這需要一個泛型類型參數:

public func objects<T: Object>(_ type: T.Type) -> Results<T> { 
     return Results<T>(RLMGetObjects(rlmRealm, (type as Object.Type).className(), nil)) 
} 

但是,當我把這個助手方法:

let currentUser = STHelpers.queryFromRealm(object: STUser, query: "uid = 'xxxxx'") 

我有這個錯誤:無法將類型'STUser.Type'的值轉換爲預期的參數類型'對象',其中STUser從Realm的Object類繼承。

我不知道哪一步是錯誤的,我真的很感激它的建議和幫助!提前致謝!

回答

1

爲什麼不直接使用的類型,而不是參數?

static func queryFromRealm<T>(type: T.type, query: String) -> Results<T> { 
    let realm = try! Realm() 
    return realm.objects(type).filter(query) 
} 

然後你可以調用函數與

let currentUser = STHelpers.queryFromRealm(Student.self, query: "uid = 'xxxxx'") 
+0

謝謝!其實我昨天才知道metatype,所以它自然不會出現在我的面前。現在我學到了一個新的竅門! – Chenglu

1
let currentUser = STHelpers.queryFromRealm(STUser(), query: "uid = 'xxxxx'") 

但是,我不認爲你的代碼是非常好的。

我的代碼:

static func queryFromRealm<T: Object>(type: T.Type, query: String) -> Results<T> { 
    let realm = try! Realm() 
    return realm.objects(type).filter(query) 
} 

let currentUser = STHelpers.queryFromRealm(STUser.self, query: "uid = 'xxxxx'")