ios – Swift:将泛型类型转换为相同的泛型类型,但具有相关类型的子类

ios – Swift:将泛型类型转换为相同的泛型类型,但具有相关类型的子类,第1张

概述考虑这些类: struct OrderedSet<T: Hashable> {}class Exercise: Hashable {}class StrengthExercise: Exercise {}class CardioExercise: Exercise {} 我想做以下事情: var displayedExercises = OrderedSet<Exercise>() { 考虑这些类:
struct OrderedSet<T: Hashable> {}class Exercise: Hashable {}class StrengthExercise: Exercise {}class CardioExercise: Exercise {}

我想做以下事情:

var displayedExercises = OrderedSet<Exercise>() {    dIDSet {        self.tableVIEw.reloadData()    }}var cardioExercises = OrderedSet<CardioExercise>()var strengthExercises = OrderedSet<StrengthExercise>()@IBAction func segmentControlChanged(segmentControl: UISegmentedControl) {    switch segmentControl.selectedSegmentIndex {    case 0:     self.displayedExercises = self.strengthExercises    case 1:     self.displayedExercises = self.cardioExercises    default:    break    }}

但我得到这个错误:

Cannot assign value of type 'OrderedSet<StrengthExercise>' to type 'OrderedSet<Exercise>

我不太明白这一点,因为StrengthExercise是Exercise的子类,并且将包含OrderedSet< Exercise>的所有内容.预计.

问题

>为什么这个错误是必要的?
>如何编写能够实现我想要的功能的东西?

雷达提起
rdar://23608799

关于协方差和逆变的博客文章
https://www.mikeash.com/pyblog/friday-qa-2015-11-20-covariance-and-contravariance.html

解决方法 我担心Swift 2.1目前无法实现这一目标.仅支持以下转换

>内置集合类型的元素类型是协变的.
>支持函数类型之间的转换,展示函数结果类型的协方差和函数参数类型的逆变. (参见Xcode 7.1 Release Notes)

作为Objective-C的泛型支持类型方差,并且考虑到Swift 2.1中函数类型转换的进展,我相信有理由相信将来会向Swift添加类型差异支持.与此同时,请记住提交雷达,如jlieske has.

与此同时,您必须复制集合或使用其中一种内置集合类型.

自Swift成为开源以来的更新:
我相信Swift 3.0 Dev Roadmap的完整泛型部分表明类型差异将在3.0中解决.虽然没有特别指出类型方差,但标准库中的特殊外壳异常(包括类型方差)是.

总结

以上是内存溢出为你收集整理的ios – Swift:将泛型类型转换为相同的泛型类型,但具有相关类型的子类全部内容,希望文章能够帮你解决ios – Swift:将泛型类型转换为相同的泛型类型,但具有相关类型的子类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1101590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存