* iOS 개인 프로젝트 시작 전 기본 개념 복귀 차원으로 내용을 정리합니다.
- Segues and Navigation for Multi-Screen Apps
- fie - new file - cocoa touch class
- 코코아터치 UIKit을 포함한 다른 라이브러리가 포함된 프레임워크
- ResultViewController - UIViewController - Controller폴더에 생성
- 스토리보드 뷰컨의 인스펙터에서 ResultViewController 연결
- 그리고 해당 뷰컨에 IBOutlet / IBAction 만들기
- 스토리보드에서 뷰컨을 선택후 컨트롤 누르고 present modally로 목적지 뷰컨에 놓고 세그웨이 설정 가능함
- transition타입 같은 것은 인스펙터에서 조절가능
- 세그의 identifier를 설정할 수 있다.
- 그리고 그렇게 설정한 identifier 명을 self.performSegue(WithIdentifier: "세그에설정한아이덴티파이어명", sender: self ) // self는 현재 뷰컨이기때문에 self로 설정하는 것이다. => 이를 통해 해당 뷰커능로 이동하는 것이 가능하다.
- 이제 뷰컨간의 데이터 전송을 해볼 것이다.
- 목적지에 var 로 변수 설정하고,
- 출발지 뷰컨에 아래와 같이 설정하면 되는데, 아래 func는 UIViewController에서 받아온 것이고
- sender.destination <== 세그가 발생하면 이니셜라이즈되는 뷰컨트롤러다.
- 만약 목적지 세그웨이가 2개라면 조건문을 걸어줘야 한다. 세그의 identifier로 가능하다!
- destination은 UIViewController이기 때문에 ResultViewController로 범위를 좁혀줘야 한다.
- let destinationVC = segue.destination as! ResultViewcontroller
- destinationVC.bmiValue = "0.0". // 목적지 뷰컨에 있는 데이터를 그제서야 출발 뷰컨에 받아올 수 있다.
- as 키워드를 통해 다운캐스팅하는 것이다 => UIViewController를 ResultViewController로 다운캐스팅 한 것임
- !는 강제로 다운캐스팅한 한 것임
- 그리고 목적지 뷰컨에서 ResultViewController에서 viewDidLoad실행시 bmiLabel.text = bmiValue를 대입해주어 계산결과가 나오도록한다.
- 같은 뷰컨 클래스에서 함수별로 필요한 프로퍼티는 최상위레벨에 전역으로 선언해주면 된다.
- 목적지 뷰컨에서 해당화면을 디스미스 시키려면? 두번째 뷰컨에서 아래 코드를 작성하여 디스미스 시키면 됨
- Adopting MVC Pattern
- CalcultatorBrain struct를 따로 만든다.
- 그리고 여기에 calculateBMI / getBMIValue 등의 function을 만듬
- Optional Binding / Nil Coalescing Operator / Optional Chaining
nil coalescing Operator 적용 예시) 제일 간편!
- BMI를 따로 struct 모델로 빼도 좋다.
- 그리고 var bmi: BMI?로 선언
- struct 데이터타입으로 BMI 설정시 optinal chaining 필요, 스트럭쳐의 내부 프로퍼티가 옵셔널이 아니더라도 해당 스트럭쳐 데이터타입이 ? nil이 올 수 있는 옵셔널로 설정 되었다면 해당객체의 옵셔널 체이닝을 해줄 필요가있음
- BMI struct
- UIColor는 UIKit import 해야 사용할 수 있음
- colorLiteral
7. 두번째 뷰컨에 첫번째 뷰컨에서 계산한 값 넘겨주기
- 두번째 뷰컨에서 변수 만들기 => 첫번쨰 뷰컨에서 변수값을 만들기 전까진 아직 값을 모르니 옵셔널로 선언 var advice: String?
- caclulatorBrain struct에서 func으로 getColor, getAdvice 만들기 각각에 bmi에 따른 return 값 다르게 하여 리턴
- 첫번째뷰컨에서 override func prepare 함수에서 destinationVC.color = calculatorBrain.getColor() 이런식으로 값 넘겨주기
두번째 뷰컨(뷰컨 만들고 swift파일과 연동하면 view가 스위프트파일과 연동되어있음)