小编Igo*_*yka的帖子

为什么我可以使用泛型来快速制作相同类型的要求?有什么办法吗?

好的,所以我有一些类定义如下:

public final class Process<InputType, OutputType, Memory>
Run Code Online (Sandbox Code Playgroud)

我想使该功能仅适用于InputType和OutputType类型完全相同的情况.所以我尝试这样:

extension Process where InputType == OutputType { }
Run Code Online (Sandbox Code Playgroud)

但这会导致:

相同类型的要求使得通用参数InputTypeOutputType等效参数

所以,我走了一段距离,并尝试这样做:

func bypass<SameType>() -> Process<SameType, SameType, Memory> where OutputType == InputType {}
Run Code Online (Sandbox Code Playgroud)

但这会导致完全相同的错误.所以问题是为什么我不能以这样的方式定义泛型,即两个泛型类型将是等价的,因为这正是我想要的.我想定义仅适用于此情况的函数,如果不遵循此规则,则在编译时将失败.

所以现在我正在使用这样的东西:

public static func bypass<SameType>() -> Process<SameType, SameType, Memory>
Run Code Online (Sandbox Code Playgroud)

哪个最终只会在运行时失败,甚至在创建时失败,但是当具体类被触发以进行操作时.

有没有办法定义extensionfunction不能编译的相同类型的泛型参数(导致编译时错误)?

更新:错过实现的一些细节会导致代码不可读,并且它们对于上下文并不重要

generics swift

5
推荐指数
1
解决办法
2036
查看次数

标签 统计

generics ×1

swift ×1