kyl*_*ejm 8 generics macos inheritance ios swift
考虑这些类:
struct OrderedSet<T: Hashable> {}
class Exercise: Hashable {}
class StrengthExercise: Exercise {}
class CardioExercise: Exercise {}
Run Code Online (Sandbox Code Playgroud)
我想做以下事情:
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
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Cannot assign value of type 'OrderedSet<StrengthExercise>' to type 'OrderedSet<Exercise>
Run Code Online (Sandbox Code Playgroud)
我不太明白这一点,因为它StrengthExercise是一个子类,Exercise并将拥有所需的一切OrderedSet<Exercise>.
问题
雷达提交
rdar:// 23608799
关于协方差和逆变的博客文章
https://www.mikeash.com/pyblog/friday-qa-2015-11-20-covariance-and-contravariance.html
我担心Swift 2.1目前无法实现这一目标.仅支持以下转换
作为Objective-C的泛型支持类型方差,并且考虑到Swift 2.1中函数类型转换的进展,我相信有理由相信将来会向Swift添加类型差异支持.与此同时,请记得提交雷达,就像jlieske一样.
与此同时,您必须复制集合或使用其中一种内置集合类型.
自Swift成为开源以来的更新: 我相信Swift 3.0开发路线图的完整泛型部分表明类型差异将在3.0中得到解决.虽然没有特别指出类型方差,但标准库中的特殊外壳异常(包括类型方差)是.
| 归档时间: |
|
| 查看次数: |
2421 次 |
| 最近记录: |