◉ 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()를 직접 넣을 때에는 각각이 따로 논다는 느낌을 받았다.
댓글