泛型类/结构体能否无数据类型?如何为无Result的APIResult添加自定义初始化器
解决方案:利用
Void类型实现专属初始化器 当然可以!你完全不需要额外定义协议,只需要借助Swift内置的Void类型,就能为无result字段的API返回场景添加专属的自定义初始化器,和你提到的针对SomeClass/SomeStruct的扩展写法思路完全一致。
具体实现步骤
- 为
APIResult添加限定Result == Void的扩展,实现只接收status和message的初始化器:
extension APIResult where Result == Void { init(status: Int, message: String) { self.status = status self.message = message self.result = nil // 这里设为nil刚好对应API返回中无result字段的情况 } }
- 使用方式示例:
- 处理无
result的返回(result 1):let emptyResult = APIResult<Void>(status: 200, message: "Success") - 处理带
result的返回(result 2):let dataResult = APIResult<String>(status: 200, message: "Success", result: "Some Result Here")
- 处理无
为什么这个方案可行?
Void是Swift内置的特殊类型,本质等价于空元组(),专门用来表示“无关联数据”的场景,完美匹配你不需要result字段的API返回格式。这种写法完全遵循了你想要的“针对特定Result类型添加专属初始化器”的思路,不需要额外引入协议,代码简洁且符合Swift的类型系统设计。
内容的提问来源于stack exchange,提问作者Zonily Jame
相关产品推荐
相关产品推荐

