【发布时间】:2016-01-30 05:42:49
【问题描述】:
这是我的游乐场:
class A {
required init() { // in order to use X() this init must be required
}
}
class B<X: A> {
required init() {
X()
}
}
class C<X: A, Y: B<X>> {
init() {
Y() // Error here: 'X' is not a subtype of 'A'
}
}
C()
这可能在 Swift 中实现吗?我做错了什么?
更新
我真正想要的是这个(Playground 因这段代码而崩溃):
import UIKit
import CoreData
class MyEntity: NSManagedObject {}
class GenericCell<X: NSManagedObject>: UITableViewCell {
func doSomething(entity: X) {}
}
class MyEntityCell: GenericCell<MyEntity> {}
class C<X: NSManagedObject, Y: GenericCell<X>>: UITableViewController {
init() {
super.init(nibName: nil, bundle: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
// here I should have Y = MyEntityCell
tableView.registerClass(Y.self, forCellReuseIdentifier: "Cell")
}
}
C<MyEntity, MyEntityCell>()
【问题讨论】:
-
我编译它没有问题。也许您的代码的其他部分出现问题?
-
@Sulthan 你可以尝试使用代码中的任何类吗?
-
完成。看我的回答。
-
@Sulthan 我完全重写了我的操场。当我尝试创建
Y实例时发生错误,您知道出了什么问题吗? -
添加了关联类型的解决方案。您还应该将编译器崩溃报告为错误。代码不应该工作,但编译器在尝试编译时不应该崩溃:)