Generic对象有没有办法没有Generic类型?

时间:2018-05-23 14:21:36

标签: swift generics

目前有一种通用类/结构没有数据类型的方法吗?

例如,我有两组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(...) {
        ...
    }
}

注意:我知道有一种不同的方法可以为protocol APIResult创建一个仅包含statusmessage的方法,我只是问这样做是否有不同的方式。

1 个答案:

答案 0 :(得分:3)

我刚才记得实际上Swift实际上内置了EmptyResult课程,并且它被称为Void()(正确的CS)名称是Unit type)。

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

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