Question Details

No question body available.

Tags

swiftui avfoundation avaudioplayer

Answers (1)

Accepted Answer Available
Accepted Answer
March 11, 2026 Score: 2 Rep: 39,182 Quality: High Completeness: 60%

Try this approach using a singleton (SoundManager) for managing the playing of the characters sounds.

Example code, adjust the logic as needed for your purpose:


import SwiftUI
import AVFoundation

struct ContentView: View { let characters = [ Character(character: "A", file: "testA"), Character(character: "B", file: "testB"), Character(character: "C", file: "testC") ] let color: Color = Color.green

var body: some View { ForEach(characters) { character in KeyCell(character: character, color: color) } } }

struct KeyCell: View { let character: Character let color: Color

var body: some View { Button { SoundManager.shared.togglePlay(character: character) } label: { Circle() .fill(color) .frame(width: 80, height: 80) .padding() .overlay { Text(character.character) .font(.system(size: 60, weight: .medium)) } } .buttonStyle(.plain) } }

struct Character: Identifiable { let id = UUID() var character: String var file: String }

class SoundManager { static let shared = SoundManager()

private var player: AVAudioPlayer? private var currentFile: String?

func togglePlay(character: Character) { if player?.isPlaying == true { player?.stop() return //