66//
77
88import  UIKit
9+ import  Later
910
1011/// Horizontal StackView
1112@available ( iOS 9 . 0 ,  * )  
1213public  class  HStack :  UIView  { 
14+     deinit  { 
15+         views. resign ( ) 
16+     } 
17+     
18+     private  var  spacing :  Float 
19+     private  var  padding :  Float 
20+     private  var  alignment :  UIStackView . Alignment 
21+     private  var  distribution :  UIStackView . Distribution 
1322    /// The views that the HStack contains
14-     public  var  views :  [ UIView ]  =  [ ] 
23+     public  lazy var  views   =  Contract < [ UIView ] > ( initialValue:  [ ] ) 
24+         . onChange  {  [ weak self]  ( views)  in 
25+             Later . main  { 
26+                 self ? . draw ( views:  views ??  [ ] ) 
27+             } 
28+     } 
1529
1630    /// Create a HStack
1731    /// - Parameters:
@@ -25,14 +39,13 @@ public class HStack: UIView {
2539                alignment:  UIStackView . Alignment  =  . fill, 
2640                distribution:  UIStackView . Distribution  =  . fill, 
2741                _ closure:  ( )  ->  [ UIView ] )  { 
28-         views =  closure ( ) 
42+         self . spacing =  spacing
43+         self . padding =  padding
44+         self . alignment =  alignment
45+         self . distribution =  distribution
2946        super. init ( frame:  . zero) 
30-         
31-         hstack ( withSpacing:  spacing, 
32-                padding:  padding, 
33-                alignment:  alignment, 
34-                distribution:  distribution, 
35-                closure) 
47+         views. value =  closure ( ) 
48+         draw ( views:  views. value ??  [ ] ) 
3649    } 
3750
3851    /// Create a HStack that accepts an array of UIView?
@@ -47,18 +60,26 @@ public class HStack: UIView {
4760                alignment:  UIStackView . Alignment  =  . fill, 
4861                distribution:  UIStackView . Distribution  =  . fill, 
4962                _ closure:  ( )  ->  [ UIView ? ] )  { 
50-         views =  closure ( ) 
51-             . compactMap  {  $0 } 
63+         self . spacing =  spacing
64+         self . padding =  padding
65+         self . alignment =  alignment
66+         self . distribution =  distribution
5267        super. init ( frame:  . zero) 
53-         
54-         hstack ( withSpacing:  spacing, 
55-                padding:  padding, 
56-                alignment:  alignment, 
57-                distribution:  distribution) 
58-         {  views } 
68+         views. value =  closure ( ) 
69+             . compactMap  {  $0 } 
70+         draw ( views:  views. value ??  [ ] ) 
5971    } 
6072
6173    required   init ? ( coder aDecoder:  NSCoder )  { 
6274        fatalError ( " init(coder:) has not been implemented " ) 
6375    } 
76+     
77+     internal  func  draw( views:  [ UIView ] )  { 
78+         clear ( ) 
79+             . hstack ( withSpacing:  spacing, 
80+                     padding:  padding, 
81+                     alignment:  alignment, 
82+                     distribution:  distribution) 
83+             {  views } 
84+     } 
6485} 
0 commit comments