{"id":18602,"date":"2022-11-01T09:49:07","date_gmt":"2022-11-01T04:19:07","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/"},"modified":"2022-11-01T09:49:07","modified_gmt":"2022-11-01T04:19:07","slug":"solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/","title":{"rendered":"[Solved] Where to place code for audio playback in a SwiftUI app [closed]"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-57072148\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"57072148\" data-parentid=\"57068891\" data-score=\"3\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>Correct, the View shouldn&#8217;t take care of data. And SwiftUI enforces this logic.<\/p>\n<p>You could create a Player class which takes care of playing the audio. And add it as an <code>EnvironmentObject<\/code>, so you can control it with your button in the <code>View<\/code>. You can then do sweet things like binding your play button to show different images depending on whether the player is&#8230; playing \ud83d\ude42<\/p>\n<p><strong>Update<\/strong><br \/>\nCode has been updated for Xcode 11 beta 4 (<code>willChange<\/code> instead of <code>didChange<\/code>)<\/p>\n<pre><code>struct PlayerView : View {\n    @EnvironmentObject private var player: Player\n\n    var body: some View {\n        Button(action: {\n            self.player.pauseOrPlay()\n        }) {\n            Image(systemName: player.isPlaying ? \"pause.circle.fill\" : \"play.circle.fill\").font(.title).frame(minWidth: 44, minHeight: 44)\n        }\n    }\n}\n\nclass Player: BindableObject {\n    let willChange = PassthroughSubject&lt;Player, Never&gt;()\n\n    var isPlaying: Bool = false {\n        willSet {\n            willChange.send(self)\n        }\n    }\n\n    func pauseOrPlay() {\n        \/\/ Code that toggles the audio on and off\n    }\n}\n<\/code><\/pre>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">2<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Where to place code for audio playback in a SwiftUI app [closed] <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Correct, the View shouldn&#8217;t take care of data. And SwiftUI enforces this logic. You could create a Player class which takes care of playing the audio. And add it as an EnvironmentObject, so you can control it with your button in the View. You can then do sweet things like binding your play button &#8230; <a title=\"[Solved] Where to place code for audio playback in a SwiftUI app [closed]\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/\" aria-label=\"More on [Solved] Where to place code for audio playback in a SwiftUI app [closed]\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[1613,2854,1631,522,1031],"class_list":["post-18602","post","type-post","status-publish","format-standard","hentry","category-solved","tag-audio","tag-avaudioplayer","tag-avfoundation","tag-swift","tag-swiftui"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Where to place code for audio playback in a SwiftUI app [closed] - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Where to place code for audio playback in a SwiftUI app [closed] - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] Correct, the View shouldn&#8217;t take care of data. And SwiftUI enforces this logic. You could create a Player class which takes care of playing the audio. And add it as an EnvironmentObject, so you can control it with your button in the View. You can then do sweet things like binding your play button ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-01T04:19:07+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Where to place code for audio playback in a SwiftUI app [closed]\",\"datePublished\":\"2022-11-01T04:19:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/\"},\"wordCount\":102,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"audio\",\"avaudioplayer\",\"avfoundation\",\"swift\",\"swiftui\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/\",\"name\":\"[Solved] Where to place code for audio playback in a SwiftUI app [closed] - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-11-01T04:19:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Where to place code for audio playback in a SwiftUI app [closed]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Where to place code for audio playback in a SwiftUI app [closed] - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Where to place code for audio playback in a SwiftUI app [closed] - JassWeb","og_description":"[ad_1] Correct, the View shouldn&#8217;t take care of data. And SwiftUI enforces this logic. You could create a Player class which takes care of playing the audio. And add it as an EnvironmentObject, so you can control it with your button in the View. You can then do sweet things like binding your play button ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/","og_site_name":"JassWeb","article_published_time":"2022-11-01T04:19:07+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Where to place code for audio playback in a SwiftUI app [closed]","datePublished":"2022-11-01T04:19:07+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/"},"wordCount":102,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["audio","avaudioplayer","avfoundation","swift","swiftui"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/","url":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/","name":"[Solved] Where to place code for audio playback in a SwiftUI app [closed] - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-11-01T04:19:07+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-where-to-place-code-for-audio-playback-in-a-swiftui-app-closed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Where to place code for audio playback in a SwiftUI app [closed]"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/18602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=18602"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/18602\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=18602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=18602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=18602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}