Я пытаюсь разработать общий метод извлечения API, но я получаю выше ошибку компиляции. После нескольких часов попыток я все еще не могу это исправить.
Тип Alias
typealias RealmResponse<T> = (Int, Results<T>?, ErrorResponse?) where T:Object, T:Mappable
Объявление класса
class Profile:Object, Mappable{
}
Метод получения API
@discardableResult
func requestRealmObject<T>(endPoint:String,
disposeBag:DisposeBag,
method:HTTPMethod = .get,
query:[String:Any] = [:],
params:[String:Any] = [:]) -> Observable<RealmResponse<T>> where T:Object, T:Mappable{
let realmResponse:Observable<ObjectResponse<T>> = APIManager.requestObject(endpoint: endPoint,
method: method,
query: query,
params: params)
.shareReplay(1)
realmResponse
.filter{ 200..<300 ~= $0.0 }
.map{ response:ObjectResponse<Profile> -> [Profile] in
if let profile = response.1{
return [profile]
}
return []
}
.subscribe(APIManager.shared.realm.rx.add(update: true, onError: nil))
.disposed(by: disposeBag)
let realmObjects = APIManager.shared.realm.objects(T.self)
return Observable.zip(realmResponse, Observable.collection(from: realmObjects)){ (response, results) in
return (response.0, results, response.2)
}
}
Использование
let profileObserver:Observable<RealmResponse<Profile>> = requestRealmObject(endpoint: APIManager.userProfileEndPoint,
disposeBag:disposeBag,
method: .post,
query:[:],
params:["username":loggedInUser.value])
.shareReplay(1)
Любая помощь в этом отношении будет принята с благодарностью.