【发布时间】:2018-05-24 12:37:13
【问题描述】:
我有一个数据模型,用于解析来自 API 的 json。
struct APIResult<Result> {
public let result: Result?
...
}
此对象接受不同的结果类型,我对其进行了扩展,因此我可以在其中包含具有不同逻辑的自定义初始化程序,这样我的 APIService 将没有任何样板代码。
这些是我所做的扩展示例,以便初始化器看起来相同
extension APIResult where Result: SomeClass {
init(_ json: Any, resultType: Result.Type) {
...
}
}
extension APIResult where Result == SomeStruct {
init(_ json: Any, resultType: Result.Type) {
...
}
}
// which then would look like this on the request function somewhere
request.warpResponse {
completion(APIResult($0, resultType: UserProfile.self))
}
现在,当我尝试将 APIResult 扩展到具有自己的泛型对象的对象时遇到问题,例如 Array<Element>,当我尝试创建扩展时,它肯定看起来像这样
extension APIResult where Result == Array<SomeClass> {
init(_ json: Any, resultType: Result.Type) {
...
}
}
但是当我尝试初始化时
// here's a subclass of SomeClass
class SubClass: SomeClass { ... }
request.warpResponse {
completion(APIResult($0, resultType: Array< SubClass >.self))
// or
completion(APIServiceResult($0, resultType: [SubClass].self))
}
会出现一条错误消息
无法将类型“Array
.Type”的值转换为预期的参数类型“Array .Type”
或
无法将类型“[SubClass].Type”的值转换为预期的参数类型“Array.Type”
有没有办法解决这个问题?
【问题讨论】: