gpt4 book ai didi

generics - 定义一个符合多个协议(protocol)/协议(protocol)+父类(super class)的变量

转载 作者:搜寻专家 更新时间:2023-11-01 06:47:55 24 4
gpt4 key购买 nike

我正在尝试在类型之间实现一个不平凡的(至少对我而言)关系。

A 类和 B 类是 MySuperClass 类的子类,我让它们实现一个协议(protocol)“MyProtocol”

class MySuperclass {...}

protocol MyProtocol {
func myProtocolMethod()
}

class A:MySuperclass, MyProtocol {...}

class B:MySuperclass, MyProtocol {...}

我的“容器”类有一个变量 x,它可以是 A 或 B 的实例

class Container {... var x:???? ....}

从 ????我的问题是我希望我可以将 x 用作 MyProtocol 和 MySuperclass。

就在今天,我在 this thread 中解决了一个非常相似的问题我认为我可以在这里应用它,但我没有成功。

我们的想法是声明变量的类型,使其满足约束 <T where T:MySuperclass, T:MyProtocol> ,但是我应该把它放在哪里呢?到目前为止我尝试的一切都没有真正意义并且失败了。

我试过,例如:

class Container<T where T:MySuperclass, T:MyProtocol>

class Container {... var x:T ...}

但我在 Container 中实例化并分配 T ,当我这样做时,我得到一个编译器错误:

class Container {... self.x = A() ....}

“类型 A 不能转换为‘T’”

但实际上应该如此,因为 A 满足类型约束。

编辑:感谢arshajii's anwer我明白为什么这是不可能的。但我仍然需要知道如何解决我最初的问题。

我不知道泛型是否真的是正确的方法。我想我真的不需要类型变量,我需要的是聚合类型之类的东西......

编辑 2- 我知道我可以通过实现一个子类来实现它。只是想知道是否还有其他方法。但是再考虑一个子类似乎是最好的方法。

提前致谢。

最佳答案

T 可以是与 FooImpl 完全无关的另一种类型(例如 FooImpl2):

           Foo          /   \    FooImpl   FooImpl2

无法将 Foo 实例分配给类型为 FooImpl2 的(潜在)变量,因此会出现错误。

关于generics - 定义一个符合多个协议(protocol)/协议(protocol)+父类(super class)的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972956/

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