- Notifications
You must be signed in to change notification settings - Fork 10.5k
/
Copy pathfixed_layout_class.swift
129 lines (94 loc) · 2.57 KB
/
fixed_layout_class.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import resilient_struct
// Fixed-layout, fixed-size base class
@_fixed_layout
openclassOutsideParent{
publicfinalvarproperty:String="OutsideParent.property"
openclassvarclassProperty:String{
return"OutsideParent.classProperty"
}
publicinit(){
print("OutsideParent.init()")
}
openfunc method(){
print("OutsideParent.method()")
}
openclassfunc classMethod(){
print("OutsideParent.classMethod()")
}
}
// Fixed-layout, resiliently-sized base class
@_fixed_layout
openclassOutsideParentWithResilientProperty{
publicletp:Point
publiclets:Size
publicletcolor:Int32
publicfinal lazy varlaziestNumber=0
publicinit(p:Point, s:Size, color:Int32){
self.p = p
self.s = s
self.color = color
}
}
// Fixed-layout, fixed-size subclass
@_fixed_layout
openclassOutsideChild:OutsideParent{
publicletchildProperty:Int=0
openoverridefunc method(){
print("OutsideChild.method()")
super.method()
}
openoverrideclassfunc classMethod(){
print("OutsideChild.classMethod()")
super.classMethod()
}
}
// Fixed-layout, dependently-sized, generic base class
@_fixed_layout
openclassGenericOutsideParent<A>{
publicfinalvarproperty:A
publicinit(property:A){
self.property = property
print("GenericOutsideParent.init()")
}
openfunc method(){
print("GenericOutsideParent.method()")
}
openclassfunc classMethod(){
print("GenericOutsideParent.classMethod()")
}
}
// Fixed-layout, dependently-sized, generic subclass
@_fixed_layout
openclassGenericOutsideChild<A>:GenericOutsideParent<A>{
publicfinalvarchildProperty:A
publicoverrideinit(property:A){
self.childProperty = property
print("GenericOutsideGenericChild.init(a: A)")
super.init(property: property)
}
openoverridefunc method(){
print("GenericOutsideChild.method()")
super.method()
}
openoverrideclassfunc classMethod(){
print("GenericOutsideChild.classMethod()")
super.classMethod()
}
}
// Fixed-layout, fixed-size subclass of generic class
@_fixed_layout
openclassConcreteOutsideChild:GenericOutsideParent<String>{
publicfinalvarchildProperty:Int=0
publicoverrideinit(property:String){
print("ConcreteOutsideChild.init(property: String)")
super.init(property: property)
}
openoverridefunc method(){
print("ConcreteOutsideChild.method()")
super.method()
}
openoverrideclassfunc classMethod(){
print("ConcreteOutsideChild.classMethod()")
super.classMethod()
}
}