본문 바로가기
🍎 iOS/문제해결

SwiftUI: RecordList생성되지 않는 오류 해결방법

by @Eddy 2022. 5. 9.
728x90

◉ Problem

 1. Recording(녹음기능)을 구현하려고 했으나, RecordingList가 Recording 후 List에 파일이 올라오지 않는 문제가 발생.

 2. Recording파일을 삭제하면, Recording했던 파일이 다시 나타난다.

 

 

◉ 문제가 발견된 Code

import SwiftUI

struct ContentView: View {
    @ObservedObject var audioRecorder: AudioRecorder

    var body: some View {
        VStack{
            RecordingList(audioRecorder: AudioRecorder())
            Recordingbtn(audioRecorder: AudioRecorder())
        }
    }
}

 - 이 코드에 포함되어 있는 AudioRecorder클래스와 Vstack 내에 있는 RecordingList/Recordingbtn 뷰의 코드는 확인하지 않아도 된다.

 - @ObservedObject var audioRecorder 변수를 만들어놓고 사용하지 않았다.

 - RecordingList/Recordingbtn 내의 audioRecorder변수에 AudioRecorder()타입속성을 부여했다.

 

 

 

◉ Solution.1

 - AudioRecorder 클래스 타입을 인스턴스로 활용하지 않고, @ObservedObject var audioRecorder를 활용

import SwiftUI

struct ContentView: View {
    @ObservedObject var audioRecorder: AudioRecorder

    var body: some View {
        VStack{
            RecordingList(audioRecorder: audioRecorder)
            Recordingbtn(audioRecorder: audioRecorder)
        }
    }
}

 

 

◉ Solution.2

 - RecordingList와 RecordingBtn은 하나의 페이지에 있다.

 - 별도의 struct로 구성하지 않고, 하나의 struct로 view를 구성하면 더 코드가 깔끔해보이기도 한다.

 - @ObservedObject를 이용하지 않고, AudioRecorder클래스를 직접 인스턴스로 반영했다.

 - 기능별 struct를 구분하려고 했지만, List와 Btn을 합쳐도 크게 길어지지 않기에 이 방법을 선택했다.

import SwiftUI


struct ContentView: View {

	var body: some View {

        VStack{
            RecordingList(audioRecorder: AudioRecorder())
            
        }
    }
}

 

◉ 알게된 것

 - 정확하게 알았다! 라고 하기엔 어려움이 있을 수 있으나, 하나의 클래스(AudioRecorder())를 인스턴스로 2개의 struct에 반영하려고 했기에, 원하는 기능이 구현되지 않았던 것 같다.

 - AudioRecorder()를 직접 타입속성으로 넣는 것은 Value타입처럼 사용한 것 같았고, @ObservedObject변수를 지정해서 타입 속성에 넣은 것은 Reference타입을 이용한 것처럼 느껴졌다. 그래서 참조이기에 여러 struct에 반영해도 서로 참조되고 있는 것 같았고, AudioRecorder()를 직접 넣을 때에는 각각이 따로 논다는 느낌을 받았다.

반응형

댓글