У меня такая ситуация:
Класс, подобный этому
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
.
Почему?
Как мне решить эту проблему?