본 내용에선 ViewController를 VC로 줄여서 사용했습니다.
struct A {
var a : String = ""
var bList : [B] = []
}
struct B {
var b : String = ""
var cList : [C] = []
}
struct C {
// d 변수는 1번 VC에서 값이 입력됨
var d : String = ""
// e 변수는 2번 VC에서 값이 입력됨
var e : String = ""
}
var firstInstance = A() //--> 오로지 한개.
var secondInstance = B() //--> 한 개
var thirdInstance = C() //--> 여러개
데이터 모델링 구조
NavigationController → 메인 VC → 1번 VC → 2번 VC → 3번 VC → 다시 메인 VC으로 돌아감.
네비게이션 구조
현재 위 코드와 같은 구조의 데이터 모델과 네비게이션 구조가 있습니다.
현재 thirdInstance들의 property 들이 모두 다른 ViewController에서 값이 주어질때 어떻게 인스턴스를 생성하고 어떻게 다른 VC으로 전달을 시켜야할지에 대해서 고민을 하고 있습니다.
제가 시도해보았던 방법입니다.
-
firstInstance를 전역변수로 선언한다. → (싱글톤 개념은 아직 미숙해서 못쓰고 있음…ㅜ)
-
1번 VC에서 아래 코드와 같이 instance를 생성하는 함수를 만든 후 for문을 통해서 a의 갯수만큼 instance를 생성하도록 했습니다. (*instanceArr는 구조체 C 인스턴스 들을 담은 후에 2번 VC로 넘기기 위해 생성, *aArr는 a의 갯수만큼 insatance를 생성시키기 위해서 만듬)
func makeInstance(a:String) { var instance = C() instance.a = a self.instanceArr.append(instance) } for a in aArr { makeInstance(a: a) }
3.이렇게 만들어낸 instanceArr(=C 구조체의 인스턴스를 담은 배열)를 2번 VC으로 넘김
4. 2번 VC에서 d 프로퍼티에 값을 입력. 이때, SegmentedControl의 selectedIndex에 따라 instanceArr에 접근하여 0번 인덱스에선 instanceArr의 0번 인스턴스에 접근하여 d 프로퍼티에 값을 입력하고, 1번 인덱스에선 instanceArr의 1번 인스턴스에 접근하여 d 프로퍼티에 값을 입력하는 식으로 전개를 함.
5. 그리고 2번 VC에서 secondInstance.cList = instanceArr와 같이 할당을 시킴.
6. 3번 VC에서는 secondInstance를 바탕으로 테이블 뷰에 뿌려줌. 또 firstinstance.bList에다가 append 시킴
7. main VC에서 firstInstance에 접근하여 테이블 뷰에 데이터를 뿌려줌.
기존에는 C 구조체에 프로퍼티가 d, e 모두 있는 것이 아니라, B 구조체에 d(=배열)와 cList 프로퍼티가 있고, C 구조체에는 e 프로퍼티만 있었습니다. 그래서 C 구조체의 d 프로퍼티를 B 구조체에서 배열로서 나열시켜 B 구조체의 d 배열 프로퍼티를 1번 VC에서 채워주고, C 구조체에서는 e 프로퍼티만 입력을 시켜준 뒤에 B 구조체의 cList에 append 시켜주는 구조였습니다.
그러던 중 C 구조체 하나로 합칠 수 있을 것 같다는 의견을 듣고 한 번 대대적인 수정에 들어가 보았지만, 현재 인스턴스가 print 조차도 되지 않고 있는 상황입니다… ① 제가 인스턴스를 여러개 생성하는 법을 "잘못"한 것이라면, 어떻게 생성을 해야하는 것인지와 ② 1번 VC에서 2번 VC로 이동하는 것과 같은 VC 간의 이동 부분에서 꼭 firstInstance에 배열을 추가하기 위해서 3번 VC까지 가지않고도 각 VC에서 바로 추가할 수 있는 방법이 없는 것인지도 궁금합니다.