Базовый класс и суперкласс выпускают по типу Swift - PullRequest
0 голосов
/ 31 октября 2018

У меня такая ситуация:

Класс, подобный этому

class BaseService {

    public init(request: BaseRequest) {}

    public func getResponse() -> BaseResponse {
        return MyResponse()
    }

    public func responseType<T>(object: T) -> T.Type {
        return type(of: object)
    }
}

MyResponse является подклассом BaseResponse. Мой объект таков: BaseResponse соответствует определенному протоколу ( Библиотека HandyJSON ), который имеет метод "десериализации", который отображает строковые поля json в свойство определенного класса.

Например, если у меня есть json с 3 полями (A, B, C) и класс с этими полями "TestClass", тогда я звоню:

let myObject : TestClass = TestClass.deserialize(from:jsonString)

В моем конкретном случае у меня есть входная строка json, представляющая класс, который возвращается методом getResponse(), и я хочу вызвать метод "deserialize" для определенного класса, который возвращается getResponse () ', а не BaseResponse как тип возвращаемого метода.

Моя проблема в том, что я вызываю responseType<T> метод с вводом объекта, возвращаемого getResponse() (в данном случае это MyResponse тип), но когда я вызываю метод deserialize для этого объекта, его тип не MyResponse, а BaseResponse.

Почему?

Как мне решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...