blob: ff1ace844ad60ff88fb69bd931b8e0588ef8f086 [file] [log] [blame]
// RUN: not %target-swift-frontend %s -typecheck
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)