{"id":13694170,"url":"https://github.com/peterfriese/SwiftUI-Concurrency-Essentials","last_synced_at":"2025-05-03T01:31:46.225Z","repository":{"id":37430625,"uuid":"379302938","full_name":"peterfriese/SwiftUI-Concurrency-Essentials","owner":"peterfriese","description":"Code for my article / video series \"SwiftUI Concurrency Essentials\"","archived":false,"fork":false,"pushed_at":"2022-04-30T08:24:50.000Z","size":748,"stargazers_count":113,"open_issues_count":0,"forks_count":6,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-08-03T17:18:54.758Z","etag":null,"topics":["async-await","concurrency","swift","swiftui"],"latest_commit_sha":null,"homepage":"https://peterfriese.dev/swiftui-concurrency-essentials-part1/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peterfriese.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-22T14:42:13.000Z","updated_at":"2024-04-28T13:33:17.000Z","dependencies_parsed_at":"2022-07-20T12:17:28.508Z","dependency_job_id":null,"html_url":"https://github.com/peterfriese/SwiftUI-Concurrency-Essentials","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfriese%2FSwiftUI-Concurrency-Essentials","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfriese%2FSwiftUI-Concurrency-Essentials/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfriese%2FSwiftUI-Concurrency-Essentials/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfriese%2FSwiftUI-Concurrency-Essentials/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peterfriese","download_url":"https://codeload.github.com/peterfriese/SwiftUI-Concurrency-Essentials/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224346373,"owners_count":17296202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async-await","concurrency","swift","swiftui"],"created_at":"2024-08-02T17:01:25.884Z","updated_at":"2024-11-12T20:31:38.324Z","avatar_url":"https://github.com/peterfriese.png","language":"Swift","readme":"\u003c!-- PROJECT SHIELDS --\u003e\n[![Swift][swift-shield]][swift-url]\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![Discussions][discussions-shield]][discussions-url]\n[![Feature Requests][featurerequest-shield]][featurerequest-url]\n[![License][license-shield]][license-url]\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/peterfriese/SwiftUI-Concurrency-Essentials\"\u003e\n    \u003cimg src=\"images/swift-logo-512.png\" alt=\"Logo\" width=\"256\" height=\"256\"\u003e\n  \u003c/a\u003e\n\n  \u003ch1 align=\"center\"\u003eSwiftUI Concurrency Essentials\u003c/h1\u003e\n\n  \u003cp align=\"center\"\u003e\n    An introduction to using Swift's new concurrency features in SwiftUI\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://twitter.com/peterfriese\"\u003eFollow me on Twitter\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/discussions\"\u003eDiscuss with me\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/issues/new?assignees=\u0026labels=\u0026template=bug_report.md\u0026title=\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/issues/new?assignees=\u0026labels=\u0026template=feature_request.md\u0026title=\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n\n# Articles and videos\n\nThe code in this repository accompanies a series of articles and videos that aim at providing a gentle introduction to Swift Concurrency in the context of SwiftUI.\n\n\n|                        \t| Topic                                                            \t| Article                                                                     \t| Video                                \t| Code                                 \t|\n|------------------------\t|------------------------------------------------------------------\t|-----------------------------------------------------------------------------\t|--------------------------------------\t|--------------------------------------\t|\n| \u003cul\u003e\u003cli\u003e[x] \u003c/li\u003e\u003c/ul\u003e \t| Getting started with Swift Concurrency in SwiftUI                \t| [link](https://peterfriese.dev/posts/swiftui-concurrency-essentials-part1/) \t| [link](https://youtu.be/pvtWLmSRimk) \t| [WordBrowser](WordBrowser)           \t|\n| \u003cul\u003e\u003cli\u003e[x] \u003c/li\u003e\u003c/ul\u003e \t| Using Task cancellation for more efficient UIs                   \t| [link](https://peterfriese.dev/posts/swiftui-concurrency-essentials-part2/) \t| [link](https://youtu.be/KdHd4rwK_oc) \t| [TaskCancellation](TaskCancellation) \t|\n| \u003cul\u003e\u003cli\u003e[x] \u003c/li\u003e\u003c/ul\u003e \t| Fetching images asynchronously using  `AsyncImage`               \t|                                                                             \t|                                      \t|                                      \t|\n| \u003cul\u003e\u003cli\u003e[ ] \u003c/li\u003e\u003c/ul\u003e \t| Running work in parallel with Swift Structured Concurrency       \t|                                                                             \t|                                      \t|                                      \t|\n| \u003cul\u003e\u003cli\u003e[ ] \u003c/li\u003e\u003c/ul\u003e \t| Using Firebase's asynchronous APIs with async/await              \t|                                                                             \t|                                      \t|                                      \t|\n| \u003cul\u003e\u003cli\u003e[ ] \u003c/li\u003e\u003c/ul\u003e \t| Refactoring and other tooling                                    \t|                                                                             \t|                                      \t|                                      \t|\n| \u003cul\u003e\u003cli\u003e[ ] \u003c/li\u003e\u003c/ul\u003e \t| Swift Concurrency and SwiftUI behind the scenes                  \t|                                                                             \t|                                      \t|                                      \t|\n| \u003cul\u003e\u003cli\u003e[x] \u003c/li\u003e\u003c/ul\u003e \t| **The Future of Combine**, or: Combining async/await and Combine \t| [link](https://peterfriese.dev/posts/combine-vs-async/)                     \t|                                      \t| [CombiningAsync](CombiningAsync)     \t|\n\n\n# Contributing\n\nContributions are welcome!\n\n* If you found a typo in an article or a bug in one of the samples, consider [filing a bug report](https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/issues/new?assignees=\u0026labels=\u0026template=bug_report.md\u0026title=)\n* Even better, consider fixing the bug and sending me a PR\n* If you've got suggestions for other things I should write/talk about, send me a [feature request](https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/issues/new?assignees=\u0026labels=\u0026template=feature_request.md\u0026title=)\n* Want to discuss w/ me and the other folks on this repository? Come on over to the [discussions forum](https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/discussions)!\n\n# Requirements\n\n* Xcode 13\n* Swift 5.6\n\n# License\n\nDistributed under the Apache 2 License. See `LICENSE` for more information.\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/peterfriese/SwiftUI-Concurrency-Essentials.svg?style=flat-square\n[contributors-url]: https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/peterfriese/SwiftUI-Concurrency-Essentials.svg?style=flat-square\n[forks-url]: https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/network/members\n[stars-shield]: https://img.shields.io/github/stars/peterfriese/SwiftUI-Concurrency-Essentials.svg?style=flat-square\n[stars-url]: https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/stargazers\n[issues-shield]: https://img.shields.io/github/issues/peterfriese/SwiftUI-Concurrency-Essentials.svg?style=flat-square\n[issues-url]: https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/issues\n[license-shield]: https://img.shields.io/github/license/peterfriese/SwiftUI-Concurrency-Essentials.svg?style=flat-square\n[license-url]: https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/blob/master/LICENSE.txt\n\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat-square\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://www.linkedin.com/in/peterfriese\n[product-screenshot]: images/screenshot.png\n\n[swift-shield]: https://img.shields.io/badge/swift-5.6-FA7343?logo=swift\u0026color=FA7343\u0026style=flat-square\n[swift-url]: https://swift.org\n\n[xcode-shield]: https://img.shields.io/badge/xcode-12.5_beta-1575F9?logo=Xcode\u0026style=flat-square\n[xcode-url]: https://developer.apple.com/xcode/\n\n[featurerequest-url]: https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/issues/new?assignees=\u0026labels=type%3A+feature+request\u0026template=feature_request.md\n[featurerequest-shield]: https://img.shields.io/github/issues/peterfriese/SwiftUI-Concurrency-Essentials/feature-request?logo=github\u0026style=flat-square\n[discussions-url]: https://github.com/peterfriese/SwiftUI-Concurrency-Essentials/discussions\n[discussions-shield]: https://img.shields.io/badge/discussions-brightgreen?logo=github\u0026style=flat-square","funding_links":[],"categories":["Sample"],"sub_categories":["RSS"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterfriese%2FSwiftUI-Concurrency-Essentials","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeterfriese%2FSwiftUI-Concurrency-Essentials","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterfriese%2FSwiftUI-Concurrency-Essentials/lists"}