PageSourceSearch

https://johnpatrickmorgan.github.io/

html johnpatrickmorgan.github.io collected 2026-10-03 09:24:25 UTC 13,254 bytes, 417 lines download raw bytes

1
2<!DOCTYPE html>
3<html lang="en">
4    
5<head>
6    <meta charset="UTF-8">
7    <meta name="viewport" content="width=device-width, initial-scale=1">
8    <meta name="generator" content="johnpatrickmorgan">
9    <title>johnpatrickmorgan</title>
10    <meta name="author" content="John Patrick Morgan">
11    
12        <meta name="keywords" content="Swift,SwiftUI,iOS,">
13    
14    
15    
16        
17            <link rel="alternate" type="application/atom+xml" title="RSS" href="/atom.xml">
18        
19    
20    
20<script type="application/ld+json">{"@context":"http://schema.org","@type":"Website","@id":"https://johnpatrickmorgan.github.io","author":{"@type":"Person","name":"John Patrick Morgan","sameAs":["https://github.com/johnpatrickmorgan","https://twitter.com/jpmmusic"],"image":"MajorMorgan.jpg"},"name":"johnpatrickmorgan","description":"A blog about the Swift programming language","url":"https://johnpatrickmorgan.github.io","keywords":"Swift, SwiftUI, iOS"}</script>
20
21    <meta name="description" content="A blog about the Swift programming language">
22<meta property="og:type" content="blog">
23<meta property="og:title" content="johnpatrickmorgan">
24<meta property="og:url" content="https://johnpatrickmorgan.github.io/index.html">
25<meta property="og:site_name" content="johnpatrickmorgan">
26<meta property="og:description" content="A blog about the Swift programming language">
27<meta property="og:locale" content="en_US">
28<meta property="article:author" content="John Patrick Morgan">
29<meta property="article:tag" content="Swift">
30<meta property="article:tag" content="SwiftUI">
31<meta property="article:tag" content="iOS">
32<meta name="twitter:card" content="summary">
33<meta name="twitter:creator" content="@jpmmusic">
34    
35    
36        
37    
38    
39        <meta property="og:image" content="https://johnpatrickmorgan.github.io/assets/images/MajorMorgan.jpg"/>
40    
41    
42    
43    
44    <!--STYLES-->
45    
46<link rel="stylesheet" href="/assets/css/style-epcsa1nqmtgul3o7hxuoq5zgbz1flaj2br28cifzmbm0aysxvypib8ntdnps.min.css">
47
48    <!--STYLES END-->
vendor: 73 bytes, lines 48-50
48
49    
50    <script async src="https://www.googletagmanager.com/gtag/js?id=
50UA-78016335-1
vendor: 16 bytes, lines 50-51
50"></script>
51    
51<script>
52        
vendor: 152 bytes, lines 52-56
52window.dataLayer = window.dataLayer || [];
53        function gtag(){dataLayer.push(arguments);}
54        gtag('js', new Date());
55
56        gtag('config', '
56UA-78016335-1
vendor: 8 bytes, lines 56-57
56');
57    
57</script>
57
58
59
60    
61
62    
63</head>
64
65    <body>
66        <div id="blog">
67            <!-- Define author's picture -->
68
69
70    
71        
72            
73        
74    
75
76<header id="header" data-behavior="3">
77    <i id="btn-open-sidebar" class="fa fa-lg fa-bars"></i>
78    <div class="header-title">
79        <a
80            class="header-title-link"
81            href="/"
82            aria-label=""
83        >
84            johnpatrickmorgan
85        </a>
86    </div>
87    
88        
89            <a
90                class="header-right-picture "
91                href="#about"
92                aria-label="Open the link: /#about"
93            >
94        
95        
96            <img class="header-picture" src="/assets/images/MajorMorgan.jpg" alt="Author&#39;s picture"/>
97        
98        </a>
99    
100</header>
101
102            <!-- Define author's picture -->
103
104
105
106        
107    
108
109<nav id="sidebar" data-behavior="3">
110    <div class="sidebar-container">
111        
112            <div class="sidebar-profile">
113                <a
114                    href="/#about"
115                    aria-label="Read more about the author"
116                >
117                    <img class="sidebar-profile-picture" src="/assets/images/MajorMorgan.jpg" alt="Author&#39;s picture"/>
118                </a>
119                <h4 class="sidebar-profile-name">John Patrick Morgan</h4>
120                
121                    <h5 class="sidebar-profile-bio"><p>Recovering Objective-C developer, one-time <a target="_blank" rel="noopener" href="http://www.johnpatrickmorgan.co.uk/">music composer</a>, now evolving with Swift.</p>
122</h5>
123                
124            </div>
125        
126        
127            <ul class="sidebar-buttons">
128            
129                <li class="sidebar-button">
130                    
131                        <a
132                            class="sidebar-button-link "
133                            href="/"
134                            
135                            rel="noopener"
136                            title="Home"
137                        >
138                        <i class="sidebar-button-icon fa fa-home" aria-hidden="true"></i>
139                        <span class="sidebar-button-desc">Home</span>
140                    </a>
141            </li>
142            
143                <li class="sidebar-button">
144                    
145                        <a
146                            class="sidebar-button-link "
147                            href="/all-archives"
148                            
149                            rel="noopener"
150                            title="Archives"
151                        >
152                        <i class="sidebar-button-icon fa fa-archive" aria-hidden="true"></i>
153                        <span class="sidebar-button-desc">Archives</span>
154                    </a>
155            </li>
156            
157        </ul>
158        
159            <ul class="sidebar-buttons">
160            
161                <li class="sidebar-button">
162                    
163                        <a
164                            class="sidebar-button-link "
165                            href="https://github.com/johnpatrickmorgan"
166                            
167                                target="_blank"
168                            
169                            rel="noopener"
170                            title="GitHub"
171                        >
172                        <i class="sidebar-button-icon fab fa-github" aria-hidden="true"></i>
173                        <span class="sidebar-button-desc">GitHub</span>
174                    </a>
175            </li>
176            
177                <li class="sidebar-button">
178                    
179                        <a
180                            class="sidebar-button-link "
181                            href="https://twitter.com/jpmmusic"
182                            
183                                target="_blank"
184                            
185                            rel="noopener"
186                            title="Twitter"
187                        >
188                        <i class="sidebar-button-icon fab fa-twitter" aria-hidden="true"></i>
189                        <span class="sidebar-button-desc">Twitter</span>
190                    </a>
191            </li>
192            
193        </ul>
194        
195            <ul class="sidebar-buttons">
196            
197                <li class="sidebar-button">
198                    
199                        <a
200                            class="sidebar-button-link "
201                            href="/atom.xml"
202                            
203                            rel="noopener"
204                            title="RSS"
205                        >
206                        <i class="sidebar-button-icon fa fa-rss" aria-hidden="true"></i>
207                        <span class="sidebar-button-desc">RSS</span>
208                    </a>
209            </li>
210            
211        </ul>
212        
213    </div>
214</nav>
215
216            
217            <div id="main" data-behavior="3"
218                 class="
219                        hasCoverMetaIn
220                        ">
221                <section class="postShorten-group main-content-wrap">
222    
223    
224    <article class="postShorten postShorten--thumbnailimg-left">
225        <div class="postShorten-wrap">
226            
227            <div class="postShorten-header">
228                <h1 class="postShorten-title">
229                    
230                        <a
231                            class="link-unstyled"
232                            href="/2021/07/03/NStack/"
233                            aria-label=": Improving SwiftUI Navigation for the Coordinator Pattern"
234                        >
235                            Improving SwiftUI Navigation for the Coordinator Pattern
236                        </a>
237                    
238                </h1>
239                <div class="postShorten-meta">
240    <time datetime="2021-07-03T21:10:39+01:00">
241	
242		    Jul 03, 2021
243    	
244    </time>
245    
246        <span>in </span>
247        
248    <a class="category-link" href="/categories/Swift/">Swift</a>
249
250
251    
252</div>
253
254            </div>
255            
256                <div class="postShorten-excerpt">
257                    <p><strong>In this post, we’ll explore how to manage SwiftUI navigation state with a single array. This will make it much simpler to hoist that state into a high-level view, and reap the benefits of the coordinator pattern.</strong></p>
258                    
259                        <a
260                            href="/2021/07/03/NStack/"
261                            class="postShorten-excerpt_link link"
262                            aria-label=": Improving SwiftUI Navigation for the Coordinator Pattern"
263                        >
264                            Continue reading
265                        </a>
266                        
267                    
268                </div>
269            
270        </div>
271        
272            <a
273                href="/2021/07/03/NStack/"
274                aria-label=": Improving SwiftUI Navigation for the Coordinator Pattern"
275            >
276                <div class="postShorten-thumbnailimg">
277                    <img alt="" src="https://johnpatrickmorgan.github.io/2021/07/03/NStack/Signpost.jpg"/>
278                </div>
279            </a>
280            
281        
282    </article>
283    
284    
285    <article class="postShorten postShorten--thumbnailimg-left">
286        <div class="postShorten-wrap">
287            
288            <div class="postShorten-header">
289                <h1 class="postShorten-title">
290                    
291                        <a
292                            class="link-unstyled"
293                            href="/2016/05/11/URLPatternMatching/"
294                            aria-label=": URL Pattern Matching"
295                        >
296                            URL Pattern Matching
297                        </a>
298                    
299                </h1>
300                <div class="postShorten-meta">
301    <time datetime="2016-05-11T21:10:39+01:00">
302	
303		    May 11, 2016
304    	
305    </time>
306    
307        <span>in </span>
308        
309    <a class="category-link" href="/categories/Swift/">Swift</a>
310
311
312    
313</div>
314
315            </div>
316            
317                <div class="postShorten-excerpt">
318                    <p><strong>When implementing deeplinks for an iOS app recently, I wondered if Swift’s pattern matching could make a viable alternative to a URL routing library. This is an account of the different approaches I tried, and the one I finally settled on.</strong></p>
319                    
320                        <a
321                            href="/2016/05/11/URLPatternMatching/"
322                            class="postShorten-excerpt_link link"
323                            aria-label=": URL Pattern Matching"
324                        >
325                            Continue reading
326                        </a>
327                        
328                    
329                </div>
330            
331        </div>
332        
333            <a
334                href="/2016/05/11/URLPatternMatching/"
335                aria-label=": URL Pattern Matching"
336            >
337                <div class="postShorten-thumbnailimg">
338                    <img alt="" src="https://johnpatrickmorgan.github.io/2016/05/11/URLPatternMatching/Abacus.jpg"/>
339                </div>
340            </a>
341            
342        
343    </article>
344    
345    <div class="pagination-bar">
346    <ul class="pagination">
347        
348        
349        <li class="pagination-number">page 1 of 1</li>
350    </ul>
351</div>
352
353</section>
354
355
356                <footer id="footer" class="main-content-wrap">
357    <span class="copyrights">
358        Copyright &copy; 2021 John Patrick Morgan. All Rights Reserved.
359    </span>
360</footer>
361
362            </div>
363            
364        </div>
365        
366
367
368    
369        
370    
371
372<div id="about">
373    <div id="about-card">
374        <div id="about-btn-close">
375            <i class="fa fa-times"></i>
376        </div>
377        
378            <img id="about-card-picture" src="/assets/images/MajorMorgan.jpg" alt="Author&#39;s picture"/>
379        
380            <h4 id="about-card-name">John Patrick Morgan</h4>
381        
382            <div id="about-card-bio"><p>Recovering Objective-C developer, one-time <a target="_blank" rel="noopener" href="http://www.johnpatrickmorgan.co.uk/">music composer</a>, now evolving with Swift.</p>
383</div>
384        
385        
386            <div id="about-card-job">
387                <i class="fa fa-briefcase"></i>
388                <br/>
389                <p><a target="_blank" rel="noopener" href="https://joinzoe.com/">ZOE</a></p>
390
391            </div>
392        
393        
394            <div id="about-card-location">
395                <i class="fa fa-map-marker-alt"></i>
396                <br/>
397                London
398            </div>
399        
400    </div>
401</div>
402
403        
404        
405<div id="cover" style="background-image:url('/assets/images/cover.jpg');"></div>
406        <!--SCRIPTS-->
407
408<script src="/assets/js/script-dli0zl8vd3wl2erskfanmlixh4w32s7nk2uynvwggb6ajexbnexpvimslhzr.min.js"></script>
408
409
410<!--SCRIPTS END-->
411
412
413
414
415
416    </body>
417</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.