当我尝试编译以下代码时出现分段错误。我正在尝试对CellUpdater
结构进行类型约束扩展,它访问一个属性,该属性的类型是在泛型类型的关联类型上定义的。不确定我是否做错了什么,或者它是否是 Swift 编译器的限制,有什么想法吗?
protocol CellUpdaterType {
func generateDetailsDrillDownController(index: Int) -> UIViewController?
}
extension CellUpdaterType {
func generateDetailsDrillDownController(index: Int) -> UIViewController? { return nil }
}
struct CellUpdater<Cell where Cell: UpdatableView> : CellUpdaterType {
let viewModel: Cell.ViewModel
}
extension CellUpdater where Cell: HeadlineCell {
func generateDetailsDrillDownController(index: Int) -> UIViewController? {
let storyboard = UIStoryboard(name: "SomeStoryboard", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("SomeViewController") as? SomeViewController
vc?.headline = viewModel.headline // This line crashes the compiler
return vc
}
}
class HeadlineCell: UITableViewCell {
var headline: Headline?
// ...
}
extension HeadlineCell : UpdatableView {
typealias ViewModel = HeadlineCellViewModel
func update(viewModel viewModel: ViewModel) {
// ...
}
}
struct HeadlineCellViewModel {
let headline: Headline
init(headline: Headline) {
self.headline = headline
}
}
protocol UpdatableView: class {
associatedtype ViewModel
func update(viewModel viewModel: ViewModel)
}