首页 > 解决方案 > 有没有办法让泛型对象没有泛型类型?

问题描述

目前有没有办法让泛型类/结构没有数据类型?

比如我有这两组 api 结果。

结果 1

{
    "status": 200,
    "message": "Success"
}

结果 2

{
    "status": 200,
    "message": "Success",
    "result": <Some Result Here>
}

这是我的示例数据模型

public struct APIResult<Result> {
    public let status: Int
    public let message: String
    public let result: Result?

    // I want some kind of init like this
    // note: I do data parsing a different way this is just an example
    init(status: Int, message: String, result: Result?) {
        self.status = status
        self.message = message
        self.result = result
    }
}

有没有办法让结果 1拥有自己的自定义初始化程序,例如如何制作其他数据类型

extension APIResult where Result: SomeClass {
    init(...) {
        ...
    }
}

extension APIResult where Result == SomeStruct {
    init(...) {
        ...
    }
}

注意:我知道通过创建一个只包含andprotocol的方法来解决这个问题,我只是问是否有不同的方法而不这样做。APIResultstatusmessage

标签: swiftgenerics

解决方案


我刚刚记得实际上实际上Swift有内置EmptyResult类,它被称为Voidor ()(正确的 CS 名称是Unit type)。

所以,你的扩展应该是这样的:

extension APIResult where Result == () {
    init(status: Int, message: String) {
        self.init(status: status, message: message, result: nil)
    }
}

推荐阅读