1
- < section class = "phx-hero " >
2
- < img src = "<%= Routes.static_path(@conn, " /images /swiftui-96x96_2x.png ") % > " alt="SwiftUI logo" width=96 height=96>
3
- < h1 >
4
- <%# = "Guides to well-designed components using SwiftUI & app architecture using Combine" %>
5
- <%= "Thinking in components with SwiftUI & Combine best practices for app architecture" %>
6
- </ h1 >
7
- < p >
8
- <%# The past five years I’ve used React and RxJS to build professional apps. %>
9
- React and RxJS have been my web tools of choice for the past five years.
10
- < br > Learn how these lessons can be applied to the Swift world.
11
- </ p >
12
- </ section >
1
+ < div class = "bg-purple-900 text-white " >
2
+ < section class = "container px-6 pt-12 pb-12 " >
3
+ < h1 class = "mx-auto max-w-4xl text-5xl text-center font-bold leading-tight text-shadow " >
4
+ < img class = "inline-block mr-2 " src = "<%= Routes.static_path(@conn, " /images /swiftui-96x96_2x.png ") % > " alt="SwiftUI logo" width=96 height=96>
5
+ <%= "Learn SwiftUI & Combine" %>
6
+ </ h1 >
7
+ < p class = "my-8 mx-auto max-w-3xl text-4xl text-center leading-snug italic text-purple-100 text-shadow " >
8
+ <%= "Learnings from five years of component systems applied to the Swift world." %>
9
+ </ p >
10
+ < p class = "py-2 text-xl text-center " >
11
+ Topics include:
12
+ <%= for text <- [ "SwiftUI" , "Combine" , "Component Design" , "Data Flow" , "APIs" , "Composing" , "Testing" , "Performance" , "Clarity" , "Documentation" , "Device Adapting" ] do %>
13
+ < a href = "# " class = "inline-block mx-1 mb-3 px-4 py-2 font-bold bg-white text-blue-600 hover:bg-blue-500 hover:text-white rounded shadow-xl " > <%= text %> </ a >
14
+ <% end %>
15
+ </ p >
16
+ </ section >
17
+ </ div >
13
18
14
- < h2 > Topics covered include:</ h2 >
15
-
16
- < ul >
17
- < li > Atomic design</ li >
18
- < li > Styling approaches</ li >
19
- < li > Reusability trade-offs</ li >
20
- < li > Testing components</ li >
21
- < li > Testing data flow</ li >
22
- < li > Composable component patterns</ li >
23
- < li > Handling errors</ li >
24
- < li > Caching data</ li >
25
- < li > Improving performance in the right areas</ li >
26
- </ ul >
19
+ < div class = "bg-white " >
20
+ < section class = "container pt-8 pb-16 " >
21
+ < article class = "mb-8 " >
22
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Atomic design</ h2 >
23
+ < p >
24
+ Learn how to name components. Apply the single responsibility principle. Find the indivisible component units, and compose them together into larger molecules.
25
+ </ p >
26
+ </ article >
27
+ < article class = "mb-8 " >
28
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Styling approaches</ h2 >
29
+ < p >
30
+ Extract common styles. Define a style guide. How do you keep styles consistent?
31
+ </ p >
32
+ </ article >
33
+ < article class = "mb-8 " >
34
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Reusability trade-offs</ h2 >
35
+ < p >
36
+ What sort of components should be resuable? How granular should you go?
37
+ </ p >
38
+ </ article >
39
+ < article class = "mb-8 " >
40
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Pattern libraries</ h2 >
41
+ < p >
42
+ When do you need a pattern library? Who are they for? How should you manage them?
43
+ </ p >
44
+ </ article >
45
+ < article class = "mb-8 " >
46
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Testing components</ h2 >
47
+ < p >
48
+ Unit test components. Test the behaviours that matter first. Use type-safety to remove impossible states.
49
+ </ p >
50
+ </ article >
51
+ < article class = "mb-8 " >
52
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Testing data flow</ h2 >
53
+ < p >
54
+ Test your data flow in isolation. Use test-driven design. Mock APIs and other sources.
55
+ </ p >
56
+ </ article >
57
+ < article class = "mb-8 " >
58
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Composable component patterns</ h2 >
59
+ < p >
60
+ Components are < em > really</ em > composable. Can we reduce boilerplate? What useful component utilities can we make?
61
+ </ p >
62
+ </ article >
63
+ < article class = "mb-8 " >
64
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Handling errors</ h2 >
65
+ < p >
66
+ Handle errors from publishers. What and when should you show users?
67
+ </ p >
68
+ </ article >
69
+ < article class = "mb-8 " >
70
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Caching data</ h2 >
71
+ < p >
72
+ Learn how to name components. Apply the single responsibility principle. Find the atomic units, and compose them together.
73
+ </ p >
74
+ </ article >
75
+ < article class = "mb-8 " >
76
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Improving performance in the right areas</ h2 >
77
+ < p >
78
+ Learn when you should focus on performance. Measure to be informed. Apply optimization techniques.
79
+ </ p >
80
+ </ article >
81
+ < article class = "mb-8 " >
82
+ < h2 class = "mb-2 text-2xl leading-normal text-purple-800 " > Automating repetitive tasks</ h2 >
83
+ < p >
84
+ Produce screenshots across many devices.
85
+ </ p >
86
+ </ article >
87
+ </ section >
88
+ </ div >
0 commit comments