我正在尝试创建一个NetworkLayer,其中请求将返回Observable对象。
我的想法是使用协议/接口对模型进行抽象,因此应用程序仅了解数据本身,如下所示:
public protocol User {
var id: String? { get }
var type: String? { get }
var firstName: String? { get }
var lastName: String? { get }
}
struct UserDTO: User, Codable {
var id: String?
var type: String?
var firstName: String?
var lastName: String?
var username: String?
var address: String?
...
}
当我尝试将模型“投射”到接口时发生了问题。
class Repository{
...
func getUser(userId: String) -> Observable<User> {
return managerManager.getUser(userId: userId)
}
}
class NewtworkManager{
...
func getUser(userId: String) -> Observable<UserDTO> {
...
}
}
由于收到此错误:
Cannot convert return expression of type Observable< UserDTO > to return type Observable< User >
您知道如何解决此问题吗?在从Repository类返回可观察对象之前,我是否需要对其进行映射?
Swift泛型是不变的(Swift标准库泛型除外,因此您应该使用map运算符:
func getUser(userId: String) -> Observable<User> {
return managerManager.getUser(userId: userId).map { $0 as User }
}