[iOS] App Development

[iOS] 기본 개념 정리 #1 : struct(mutating), IBAction, IBOutlet, MVC, Optional, Parameter

ddgoori 2021. 10. 29. 20:08

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

 

  1. 프로젝트 생성, bundle identifier 등, 프로젝트 수정은 어디서 할 수 있는지
  2. ImageView 추가, Asset으로 불러와서 추가하기, 1x, 2x, 3x의 의미
  3. UI요소들 X, Y 배치, 사이즈 조절
  4. AppIcon 사이즈 별로 프로젝트에 적용하기
  5. Structure개념 Town을 예시로 설명
    1. Swift 파일로 Structure파일 생성 -> structure의 명과 파일명은 같도록
    2. 그리고 이 structure를 다른 ViewController에서 불러와서 initialize해서 사용하면 됨 
    3. 타겟에 포함 시켜야함(파일 생성할 때나, 인스펙터에서)
    4. 보통 내가만든 건 타겟만 포함시키면 되고, 외부 라이브러리는 import 시켜야 함
  6. Action => IBAction func로, UIButton이면 연결된 것을 sender로 가져와서 sender.background = UIColor.green 이런식으로 가능
  7. updateUI() function을 통해 설정해준 것을 클리어해주는 코드가 필요하다.
  8. 너무 빨리 updateUI()를 진행하면, 적용이 안된 것 처럼 보일 수 있으니, 타이머로 지연해줄 수 있다.
    1. Timer.schedulerTimer함수로 가능하다. timeInterval이 끝나면 #selector에 적은 함수가 실행되도록 할 수 있다.
    2. 만약 한번만 실행할거면 굳이 timer = Timer.schedulerTimer(~~) 이런식으로 변수로 저장할 필요 없다.
    3. 하단에 progressBar 진행 UI 추가를 위해서는IBOutlet으로 스토리보드랑 연결해놓은 값을 버튼의 IBAction이 발생할 때마다 업데이트 쳐주면 됨! IBAction은 해당 UI에 touch up이라던지 이벤트가 발생하면 일어날 기능을 정의해놓을 수 있음
  9. IBAction, IBOutlet 둘 다 스토리보드와의 연결고리 담당
    1. IBAction: Event가 일어난 경우 호출되는 Action을 정의 해둠
    2. IBOutlet은 값에 접근하기 위한 변수라고 보면 됨
    3. IB는 Interface Builder의 약자 즉, IB Action은 Interface Builder를 통해 받아온 정보로 Action을 수행하겠다는 것
  10. 디자인패턴 MVC
    1.  Model : Data & Logic
      1. 퀴즈데이터
      2. QuizBrain에 들어갈 데이터타입인 struct Question 정의하는 Question.swift파일도 있다.
      3. QuizBrain: 퀴즈데이터, 정답확인하는 func
      4. 그렇다면, ViewController에서 정답맞는지 틀린지 여부 확인해서 UI 업데이트(틀렸다고 색깔바꾼다던지) 해주는 건데!
      5. 그걸 어떻게 할 것인가?
      6. Model에 true or false 혹은 계산로직 return 하도록해놓고
      7. ViewController에서 그 계산해서 나온 값에 따라 UI 업데이트하게 해준다.
      8. Immutabability?
        1. 불변객체: 생성 후 그 상태를 바꿀 수 없는 객체
        2. struct내부에서 self는 자동으로 백그라운드에서 만들어지고, let키워드로 정의된다.
        3. 그래서 self는 immutable함
        4. struct 내부에서 자신의 property(self.)를 변경하는 함수가 있다면, struct는 객체를 생성하는 순간 생기기 때문에 immutable한 것임. 그래서 안된다고 경고가 뜸
        5. 그래서 mutating을 붙이면 가능하다!
        6. Struct내부에서 내부 property중 하나를 변경하는 method를 작성하려면 mutating을 붙여야함
        7. 근데 만약에 그 Struct자체를 let으로 객체를 만들면, mutating을 쓴 method를 부를 수 없음. 왜냐면 let으로 객체를 만들어서 내부 내용을 변경할 수 없기 때문암.
        8. Score는 버튼 누를때마다 업데이트 되어야하는 부분, 뷰컨에선 getScore를 퀴즈브레인에서 받아와서 보여줌
        9. 결국은 모델인 QuizBrain structure에서 로직 작성함
        10. 데이터가 있으면 그 데이터 수정이나 삭제하는 로직은 다 Model 스트럭쳐 안에 두고, 뷰컨에선 그 스트럭쳐의 함수를 호출하기만 한다. 호출에서 View에 보여주도록만 한다.
    2. 함수의 인자 그리고 output 리턴타입정의하는 법
    3. mutating func checkAnswer(userAnswer: String) -> Bool {
              //Need to change answer to rightAnswer here. 
              if userAnswer == quiz[questionNumber].rightAnswer {
                  score += 1
                  return true
              } else {
                  return false
              }
          }​

      1. View : User Interface / Interaction
      2. Controller : Mediator (ViewController)
        1. 여기서 Model인 질문과 답이 담긴 QuizBrain의 객체와 정답인지 확인하는 QuizBrain의 로직을 가져옴 
        2. 야 퀴즈브레인 모델~ getProgress해~ 시키고, ViewController에서는 UI 업데이트만 함
      3. 뷰와 모델은 직접적 통신하지 않음.
      4. 컴포넌트를 분리하고 모듈화하여 이해하기 쉽게 만듬
  11. Optional 옵셔널 
    1. ? => 이 값에 nil은 포함될 수도 있다.
    2. . ! => 이 변수엔 Nil 값이 들어갈리가 없다.
  12. func checkAnswer(_ userAnswer: String) {}. => _는 external parameter 외부에서 해당함수에 값넣을때 사용하는데 _ 하면 따로 외부에서 해당 함수사용시 파라미터 이름 입력안해줘도 됨. userAnswer는 internal parameter라 함수 내부에서 사용하는 파라미터명이다.
  13. 코코아 터치 프레임워크?
    1. 프레임워크는 앱의 뼈대를 만들어 주는 것
    2. 보통 iOS개발할 때 이 코코아터치 프레임워크를 사용 많이함. => UIKit, Foundation, Coredata, MapKit등이 있음

출처:

https://medium.com/@zieunv/cocoa-touch-framework-bf78307c4a51

 

(iOS) Cocoa Touch Framework

iOS 애플리케이션 개발환경 토대인 코코아 터치 프레임워크’’

medium.com

https://nsios.tistory.com/82

 

[Swift] iOS 프레임워크 구조

iOS의 기본적인 구조는 이렇게 이루어져있어요 각 계층별로 하나하나 살펴볼게요 우선 최상위에 Cocoa / Cocoa Touch 가있는데 차이가뭘까요?? Cocoa라는 단어가 붙으면 우선 Objective-C Runtime을 기반으

nsios.tistory.com