You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift调用泛型网络请求报错:无法推断泛型参数T如何解决?

错误原因

你的代码报错的核心是Swift中协议本身不遵循自身,哪怕LoginInfoBase继承了Decodable,LoginInfoBase.Type这个协议类型也不能作为满足T: Decodable约束的泛型参数传入genericQuery,泛型需要的是具体的遵循协议的类型,而不是协议本身的类型。

修复方案

将getLoginInfo改造为泛型方法,给泛型参数添加LoginInfoBase约束即可:

public func getLoginInfo<T: LoginInfoBase>(loginInfoClass: T.Type, completionHandler: @escaping (Swift.Result<T, Error>) -> Void) {
    genericQuery(urlString: "\(baseURL)/users/get_login_info/", method: .get, params: nil, decodable: loginInfoClass.self) { result in
        // 原有逻辑无需修改,直接透传result即可
        completionHandler(result)
    }
}
调用说明

原有调用代码不需要做任何改动:

getLoginInfo(loginInfoClass: ExampleLoginInfo.self) { result in 
    // 此时result的成功值就是ExampleLoginInfo类型,可以直接访问自定义扩展的user_info、more_example_data等字段
    <more code here>
}
实现效果

修改后既满足通用登录库的要求:任意遵循LoginInfoBase协议的自定义用户数据类都可以传入,也能保证解码后的实例是传入的具体类类型,完整保留接入方自定义的扩展字段。

内容的提问来源于stack exchange,提问作者Dylan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:51:03