【发布时间】:2016-07-11 20:39:19
【问题描述】:
当我尝试编译以下代码时遇到分段错误。我正在尝试在 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)
}
【问题讨论】:
-
虽然这在 Xcode 7.3.1 中确实存在段错误,但它在 Xcode 8 beta 2 中编译:)
标签: ios swift generics associated-types