Slide 1

Slide 1 text

gio @mokagio 20x20

Slide 2

Slide 2 text

Less Conventional Swift

Slide 3

Slide 3 text

Free Functions / / F i l e . s w i f t f u n c t r a n s f o r m ( i n p u t : A ) - > B { / / . . . }

Slide 4

Slide 4 text

Higher Order Functions func as input func as output

Slide 5

Slide 5 text

e n u m

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

enum for view state e n u m V i e w S t a t e < T > { c a s e E m p t y c a s e L o a d i n g c a s e L o a d e d ( T ) c a s e E r r o r e d ( E r r o r P r o t o c o l ) }

Slide 8

Slide 8 text

Either e n u m E i t h e r < A , B > { c a s e L e f t ( A ) c a s e R i g h t ( B ) }

Slide 9

Slide 9 text

l e t d a t a : [ E i t h e r < P i z z a , A d > ] = [ / / . . . ] f u n c t a b l e V i e w ( _ t a b l e V i e w : U I T a b l e V i e w , c e l l F o r R o w A t i n d e x P a t h : I n d e x P a t h ) - > U I T a b l e V i e w C e l l { l e t i t e m = d a t a [ i n d e x P a t h . r o w ] l e t i d e n t i f i e r = i d e n t i f i e r ( f o r I t e m : i t e m ) l e t c e l l = t a b l e V i e w . d e q u e u e R e u s a b l e C e l l ( w i t h I d e n t i f i e r : i d e n t i f i e r , f o r : i n d e x P a t h ) s w i t c h i t e m { c a s e . L e f t ( l e t m o d e l ) : c o n f i g u r e ( c e l l , w i t h M o d e l : m o d e l ) c a s e . R i g h t ( l e t a d ) : c o n f i g u r e ( c e l l , w i t h A d : a d ) } r e t u r n c e l l }

Slide 10

Slide 10 text

Result e n u m R e s u l t < T > { c a s e S u c c e s s ( T ) c a s e F a i l u r e ( E r r o r P r o t o c o l ) }

Slide 11

Slide 11 text

l e t t a s k = s e s s i o n . d a t a T a s k ( w i t h : r e q u e s t ) { ( r e s u l t : R e s u l t < ( D a t a s w i t c h r e s u l t { c a s e . S u c c e s s ( l e t d a t a , l e t r e s p o n s e ) : / / D o s t u f f w i t h d a t a a n d r e s p o n s e b r e a k c a s e . F a i l u r e ( l e t e r r o r ) : / / D o s t u f f w i t h e r r o r b r e a k } } t a s k . r e s u m e ( )

Slide 12

Slide 12 text

https:/ /github.com/antitypical/Result m a p , f l a t M a p m a p E r r o r , f l a t M a p E r r o r

Slide 13

Slide 13 text

materialize d o { l e t j s o n = t r y J S O N S e r i a l i z a t i o n . j s o n O b j e c t ( w i t h : d a t a , o p t i o n s : [ ] ) } c a t c h { p r i n t ( e r r o r ) } / / / / m a t e r i a l i z e ! / / l e t j s o n = m a t e r i a l i z e { t r y J S O N S e r i a l i z a t i o n . j s o n O b j e c t ( w i t h : d a t a , o p t i o n s : [ ] ) } s w i t c h j s o n { c a s e . S u c c e s s ( l e t o b j e c t ) : / / D o s t u f f w i t h a c t u a l v a l u e b r e a k c a s e . F a i l u r e ( l e t e r r o r ) : / / D o s t u f f w i t h e r r o r b r e a k }

Slide 14

Slide 14 text

O p t i o n a l < T > E i t h e r < A , B > R e s u l t < T >

Slide 15

Slide 15 text

Generics & Abstractions

Slide 16

Slide 16 text

GenericTableViewController l e t v c : G e n e r i c T a b l e V i e w C o n t r o l l e r < S t r i n g > = t a b l e V i e w C o n t r o l l e r ( w i t h : p i z z a N a m e s , c e l l C l a s s : U I T a b l e V i e w C e l l . s e l f , c o n f i g u r a t o r : { v a l u e , c e l l i n c e l l . t e x t L a b e l ? . t e x t = v a l u e } ) https:/ /github.com/mokagio/GenericTableViewController

Slide 17

Slide 17 text

i n i t ?

Slide 18

Slide 18 text

Dependant Types N o t E m p t y A r r a y P h o n e N u m b e r B o u n d e d I n t

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Try less conventional code @mokagio