Swift中使用Result枚举构造Response对象时编译器报错问题咨询
解决Swift Result枚举构造时的编译错误
嘿,我来帮你搞定这个编译报错的问题!咱们先拆解下错误根源:当你写Response(result: .success(objects))时,Swift的类型推断在这里“卡壳”了——虽然Response的result属性明确要求是Result<[Object]>,但编译器会先单独解析.success(objects)的类型,默认会把它推断成Result<[你的objects实际类型]>,而非Result<[Object]>,这就导致了类型不匹配的报错。
下面给你几个实用的解决方案:
方案1:显式指定泛型参数类型
直接告诉编译器你要构造的是Result<[Object]>的success case,用Swift 5.1+支持的泛型参数显式语法:
let successResponse = Response(result: Result<[Object]>.success(objects))
或者先给结果变量做类型标注,再传入:
let result: Result<[Object]> = .success(objects) let successResponse = Response(result: result)
方案2:强制转换objects的类型
如果你的objects是Object协议遵循者的数组(比如[ConcreteObject],其中ConcreteObject: Object),可以直接把它转成[Object]类型,帮编译器明确关联:
let successResponse = Response(result: .success(objects as [Object]))
方案3:给Response加便捷构造函数(可选优化)
如果你经常需要构造这类成功响应,可以给Response扩展一个便捷构造函数,帮编译器自动完成类型推断:
extension Response { init(success objects: [Object]) { self.result = .success(objects) } } // 之后直接这样用就不会报错了: let successResponse = Response(success: objects)
这样就能完美解决这个编译错误啦!
内容的提问来源于stack exchange,提问作者jbehrens94
相关产品推荐
相关产品推荐

