[iOS] App Development

[iOS] 기본 개념 정리 #3 : Segues, Multi-Screens, MVC 적용, Adopting MVC Pattern, Optional Binding, Optional Chaining

ddgoori 2021. 11. 1. 16:43

* iOS 개인 프로젝트 시작 전 기본 개념 복귀 차원으로 내용을 정리합니다.

 

  1. Segues and Navigation for Multi-Screen Apps
    1. fie - new file - cocoa touch class 
    2. 코코아터치 UIKit을 포함한 다른 라이브러리가 포함된 프레임워크
    3. ResultViewController - UIViewController - Controller폴더에 생성
    4. 스토리보드 뷰컨의 인스펙터에서 ResultViewController 연결
    5. 그리고 해당 뷰컨에 IBOutlet / IBAction 만들기 
    6. 스토리보드에서 뷰컨을 선택후 컨트롤 누르고 present modally로 목적지 뷰컨에 놓고 세그웨이 설정 가능함
    7. transition타입 같은 것은 인스펙터에서 조절가능
    8. 세그의 identifier를 설정할 수 있다. 
    9. 그리고 그렇게 설정한 identifier 명을 self.performSegue(WithIdentifier: "세그에설정한아이덴티파이어명", sender: self ) // self는 현재 뷰컨이기때문에 self로 설정하는 것이다.  => 이를 통해 해당 뷰커능로 이동하는 것이 가능하다.
    10. 이제 뷰컨간의 데이터 전송을 해볼 것이다.
    11. 목적지에 var 로 변수 설정하고, 
    12. 출발지 뷰컨에 아래와 같이 설정하면 되는데, 아래 func는 UIViewController에서 받아온 것이고
    13. sender.destination <== 세그가 발생하면 이니셜라이즈되는 뷰컨트롤러다. 
    14. 만약 목적지 세그웨이가 2개라면 조건문을 걸어줘야 한다. 세그의 identifier로 가능하다!
    15. destination은 UIViewController이기 때문에 ResultViewController로 범위를 좁혀줘야 한다.
      1. let destinationVC = segue.destination as! ResultViewcontroller
      2. destinationVC.bmiValue = "0.0". // 목적지 뷰컨에 있는 데이터를 그제서야 출발 뷰컨에  받아올 수 있다.
    16. as 키워드를 통해 다운캐스팅하는 것이다 => UIViewController를 ResultViewController로 다운캐스팅 한 것임 
    17. !는 강제로 다운캐스팅한 한 것임
    18. 그리고 목적지 뷰컨에서 ResultViewController에서 viewDidLoad실행시 bmiLabel.text = bmiValue를 대입해주어 계산결과가 나오도록한다.
    19. 같은 뷰컨 클래스에서 함수별로 필요한 프로퍼티는 최상위레벨에 전역으로 선언해주면 된다.
    20.  
    21. 목적지 뷰컨에서 해당화면을 디스미스 시키려면? 두번째 뷰컨에서 아래 코드를 작성하여 디스미스 시키면 됨

  2. Adopting MVC Pattern
    1. CalcultatorBrain struct를 따로 만든다.
    2. 그리고 여기에 calculateBMI / getBMIValue 등의 function을 만듬
    3.  
  3. Optional Binding / Nil Coalescing Operator / Optional Chaining

 

nil coalescing Operator 적용 예시) 제일 간편!

  1. BMI를 따로 struct 모델로 빼도 좋다.
    1. 그리고 var bmi: BMI?로 선언
    2. struct 데이터타입으로 BMI 설정시 optinal chaining 필요, 스트럭쳐의 내부 프로퍼티가 옵셔널이 아니더라도 해당 스트럭쳐 데이터타입이 ?  nil이 올 수 있는 옵셔널로 설정 되었다면 해당객체의 옵셔널 체이닝을 해줄 필요가있음
  2. BMI struct
  3. UIColor는 UIKit import 해야 사용할 수 있음
  4. colorLiteral
  5.  

 

7. 두번째 뷰컨에 첫번째 뷰컨에서 계산한 값 넘겨주기

  1. 두번째 뷰컨에서 변수 만들기  => 첫번쨰 뷰컨에서 변수값을 만들기 전까진 아직 값을 모르니 옵셔널로 선언 var advice: String?
  2. caclulatorBrain struct에서 func으로 getColor, getAdvice 만들기 각각에 bmi에 따른 return 값 다르게 하여 리턴
  3. 첫번째뷰컨에서 override func prepare 함수에서 destinationVC.color = calculatorBrain.getColor() 이런식으로 값 넘겨주기
  4.  

두번째 뷰컨(뷰컨 만들고 swift파일과 연동하면 view가 스위프트파일과 연동되어있음)