如何将Observable的值转换为协议类型

问题描述 投票:0回答:1

我正在尝试创建一个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类返回可观察对象之前,我是否需要对其进行映射?

ios swift observable rx-swift
1个回答
0
投票

Swift泛型是不变的(Swift标准库泛型除外,因此您应该使用map运算符:

func getUser(userId: String) -> Observable<User> {

    return managerManager.getUser(userId: userId).map { $0 as User }
}
© www.soinside.com 2019 - 2024. All rights reserved.