-
Notifications
You must be signed in to change notification settings - Fork 10.4k
/
Copy path0072-issue-46480-1.swift
88 lines (59 loc) · 1.71 KB
/
0072-issue-46480-1.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// 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)