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'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'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 © 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'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.