swift - 为什么 Swift 不能自动将泛型类型参数转换为其父类(super class)?

标签 swift generics

在 Swift 中考虑以下内容:

struct GenericStruct<T> {}
class A {}
class B: A {}

func doSomething() -> GenericStruct<A> {
   return GenericStruct<B>()
}

这给出了错误:

Cannot convert return expression of type GenericStruct<B> to return type GenericStruct<A>

但是BA 的子类.

  • 为什么 Swift 不能转换 GenericStruct<B>GenericStruct<A>
  • 在这种情况下应该做什么?

最佳答案

Swift 泛型是不变的,这意味着两个泛型类型是不相关的,即使它们的泛型类型参数具有继承关系。不变的泛型类型不能相互转换,因为它们之间没有继承关系。

这意味着GenericStruct<B>GenericStruct<A>完全无关,即使 BA 的子类,因此您不能将一个转换为另一个。

关于swift - 为什么 Swift 不能自动将泛型类型参数转换为其父类(super class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50859027/

相关文章:

ios - 如何在 willDisplay 单元格回调中访问 UICollectionView 中的特定单元格

Swift:将数据从 View Controller 传递到导航 Controller

Swift - JSQMessagesViewController 显示传入的头像电子邮件或用户名

scala - Scala 中的类型 - 下界

c# - 具有通用集合参数的方法

c# - 泛型上的 InvalidCastException

ios - 没有更多上下文,表达式类型不明确

scala - 如何在scala中将函数定义为所有数字的通用函数?

java - 将具体的 EnumMap 对象列表传递给通用 EnumMap 参数列表会导致编译错误

swift - 如何在iOS 13 Share sheet中实现 "Options"