gpt4 book ai didi

swift - 声明包含具有泛型类型的案例的枚举的返回值?

转载 作者:行者123 更新时间:2023-11-28 10:46:17 25 4
gpt4 key购买 nike

我有一个简单的网络结果枚举。如果调用成功,我将使用请求类型的对象返回成功。如果不成功,我将返回一条失败消息。

enum Result<T> {
case success(T)
case failure(String)
}

func testAPI(requestedObjClass: String) -> Result {...}

对于这段代码,编译器给出错误:

Reference to generic type 'Result' requires arguments in <...>

它要我用 Result<MyObj> 之类的东西来定义“成功”案例的类型,但根据参数的不同,它可能是不同的类型,我什至可能根本不会返回成功。这个“结果”想法的正确架构是什么?

最佳答案

编译器需要在编译时解析通用类型占位符值。例如,在

if case .success(let res) = testAPI(requestedObjClass: "...") {
print(res)
}

编译器需要知道res 的类型。因此你不能返回一个 Result,其中相应的 T 仅在运行时确定。

一个可能的解决方案可能是将请求的结果类型作为类型而不是字符串,并使函数通用:

func testAPI<T>(requestedObjClass: T.Type) -> Result<T> {
// ...
}

然后在通话中

if case .success(let res) = testAPI(requestedObjClass: Int.self) {
print(res)
}

编译器可以推断类型T(以及结果的类型value res) 在编译时,在本例中为 Int

关于swift - 声明包含具有泛型类型的案例的枚举的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com