2015-12-30 32 views
1

我有一个协议:iOS的境界:我怎么垂头丧气到对象

protocol DatabaseProtocol { 
    func getObjects<T>(_: T.Type) -> [T] 
} 

然后,我实现此协议:

class RealmDatabase: Database { 
    func getObjects<T>(object: T) -> [T] { 
     //how can i return here the objects from realm? 
     return realm.objects(T) 
    } 
} 

,我不希望更改协议来限制<ŧ :Object>,因为我想能够更改为另一个数据库,并且Object从领域继承。

enter image description here

enter image description here

更新#1

我也试过这样:

func getObjects<T>(object: T) -> [T] { 
    let result = realm.objects(object as Object).map { $0 } 
    return result 
} 

然后我得到“无法转换类型的值 'T' 输入对象在胁迫下'

回答

1
func getObjects<T>(t: T.Type) -> [T] { 
    return realm.objects(t as! Object.Type).map { $0 as! T } 
} 
0

在斯威夫特3.

通用T需要从RealmSwift.Object继承

func add<T: Object>(_ object: T) -> Result<Void, Error> { 
    return realmResult.flatMap { realm -> Result<Void, Error> in 
     do { 
      try realm.write { 
       realm.add(object, update: false) 
      } 
      return .success() 
     } catch { 
      return .failure(error) 
     } 
    } 
} 

否则,我认为更好的办法是你的协议应该作出associatedtype对象,如:

protocol DatabaseProtocol { 
    associatedtype T: RealmSwift.Object 
    func getObjects(_ object: T) -> [T] 
}