mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
89 lines
1.7 KiB
Swift
89 lines
1.7 KiB
Swift
// RUN: not %target-swift-frontend %s -typecheck
|
|
|
|
// https://github.com/apple/swift/issues/46480
|
|
|
|
public protocol TiView {
|
|
|
|
}
|
|
|
|
public class TiPresenter<V: TiView> {
|
|
|
|
private var view: V? = nil
|
|
|
|
public func create() {
|
|
|
|
}
|
|
|
|
public func attchView(view: V) {
|
|
self.view = view
|
|
}
|
|
|
|
public func detachView() {
|
|
self.view = nil
|
|
}
|
|
|
|
public func destroy() {
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public class TiViewController<P: TiPresenter<V>, V: TiView>
|
|
/*: UiViewController*/ // should extend UiViewController but this is not problem here
|
|
{
|
|
|
|
lazy var presenter: P = {
|
|
return self.providePresenter()
|
|
}()
|
|
|
|
public init() {
|
|
presenter.create()
|
|
}
|
|
|
|
func providePresenter() -> P {
|
|
fatalError("must override")
|
|
}
|
|
|
|
func provideView() -> V {
|
|
if (self is V) {
|
|
return self as! V
|
|
} else {
|
|
fatalError("UIViewController doesn't implement TiView interface")
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
protocol MyView: TiView {
|
|
func setDataItems(_: [String])
|
|
}
|
|
|
|
class MyPresenter: TiPresenter<MyView> { //ERROR: Using 'MyView' as a concrete type conforming to protocol 'TiView' is not supported
|
|
|
|
}
|
|
|
|
|
|
class MyController: TiViewController<MyPresenter, MyView>, MyView { // ERROR: 'TiViewController' requires that 'MyPresenter' inherit from 'TiPresenter<MyView>'
|
|
|
|
|
|
override func providePresenter() -> MyPresenter {
|
|
return MyPresenter()
|
|
}
|
|
|
|
internal func setDataItems(_: [String]) {
|
|
//TODO
|
|
}
|
|
}
|
|
|
|
let vc = MyController()
|
|
let p = vc.presenter
|
|
|
|
class TestView: MyView {
|
|
internal func setDataItems(_: [String]) {
|
|
// TODO
|
|
}
|
|
}
|
|
let view = TestView()
|
|
|
|
p.attchView(view: view)
|