* iOS 개인 프로젝트 시작 전 기본 개념 복귀 차원으로 내용을 정리합니다.
- 프로젝트 생성, bundle identifier 등, 프로젝트 수정은 어디서 할 수 있는지
- ImageView 추가, Asset으로 불러와서 추가하기, 1x, 2x, 3x의 의미
- UI요소들 X, Y 배치, 사이즈 조절
- AppIcon 사이즈 별로 프로젝트에 적용하기
- Structure개념 Town을 예시로 설명
- Swift 파일로 Structure파일 생성 -> structure의 명과 파일명은 같도록
- 그리고 이 structure를 다른 ViewController에서 불러와서 initialize해서 사용하면 됨
- 타겟에 포함 시켜야함(파일 생성할 때나, 인스펙터에서)
- 보통 내가만든 건 타겟만 포함시키면 되고, 외부 라이브러리는 import 시켜야 함
- Action => IBAction func로, UIButton이면 연결된 것을 sender로 가져와서 sender.background = UIColor.green 이런식으로 가능
- updateUI() function을 통해 설정해준 것을 클리어해주는 코드가 필요하다.
- 너무 빨리 updateUI()를 진행하면, 적용이 안된 것 처럼 보일 수 있으니, 타이머로 지연해줄 수 있다.
- Timer.schedulerTimer함수로 가능하다. timeInterval이 끝나면 #selector에 적은 함수가 실행되도록 할 수 있다.
- 만약 한번만 실행할거면 굳이 timer = Timer.schedulerTimer(~~) 이런식으로 변수로 저장할 필요 없다.
- 하단에 progressBar 진행 UI 추가를 위해서는IBOutlet으로 스토리보드랑 연결해놓은 값을 버튼의 IBAction이 발생할 때마다 업데이트 쳐주면 됨! IBAction은 해당 UI에 touch up이라던지 이벤트가 발생하면 일어날 기능을 정의해놓을 수 있음
- IBAction, IBOutlet 둘 다 스토리보드와의 연결고리 담당
- IBAction: Event가 일어난 경우 호출되는 Action을 정의 해둠
- IBOutlet은 값에 접근하기 위한 변수라고 보면 됨
- IB는 Interface Builder의 약자 즉, IB Action은 Interface Builder를 통해 받아온 정보로 Action을 수행하겠다는 것
- 디자인패턴 MVC
- Model : Data & Logic
- 퀴즈데이터
- QuizBrain에 들어갈 데이터타입인 struct Question 정의하는 Question.swift파일도 있다.
- QuizBrain: 퀴즈데이터, 정답확인하는 func
- 그렇다면, ViewController에서 정답맞는지 틀린지 여부 확인해서 UI 업데이트(틀렸다고 색깔바꾼다던지) 해주는 건데!
- 그걸 어떻게 할 것인가?
- Model에 true or false 혹은 계산로직 return 하도록해놓고
- ViewController에서 그 계산해서 나온 값에 따라 UI 업데이트하게 해준다.
- Immutabability?
- 불변객체: 생성 후 그 상태를 바꿀 수 없는 객체
- struct내부에서 self는 자동으로 백그라운드에서 만들어지고, let키워드로 정의된다.
- 그래서 self는 immutable함
- struct 내부에서 자신의 property(self.)를 변경하는 함수가 있다면, struct는 객체를 생성하는 순간 생기기 때문에 immutable한 것임. 그래서 안된다고 경고가 뜸
- 그래서 mutating을 붙이면 가능하다!
- Struct내부에서 내부 property중 하나를 변경하는 method를 작성하려면 mutating을 붙여야함
- 근데 만약에 그 Struct자체를 let으로 객체를 만들면, mutating을 쓴 method를 부를 수 없음. 왜냐면 let으로 객체를 만들어서 내부 내용을 변경할 수 없기 때문암.
- Score는 버튼 누를때마다 업데이트 되어야하는 부분, 뷰컨에선 getScore를 퀴즈브레인에서 받아와서 보여줌
- 결국은 모델인 QuizBrain structure에서 로직 작성함
- 데이터가 있으면 그 데이터 수정이나 삭제하는 로직은 다 Model 스트럭쳐 안에 두고, 뷰컨에선 그 스트럭쳐의 함수를 호출하기만 한다. 호출에서 View에 보여주도록만 한다.
- 함수의 인자 그리고 output 리턴타입정의하는 법
-
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 } }
- View : User Interface / Interaction
- Controller : Mediator (ViewController)
- 여기서 Model인 질문과 답이 담긴 QuizBrain의 객체와 정답인지 확인하는 QuizBrain의 로직을 가져옴
- 야 퀴즈브레인 모델~ getProgress해~ 시키고, ViewController에서는 UI 업데이트만 함
- 뷰와 모델은 직접적 통신하지 않음.
- 컴포넌트를 분리하고 모듈화하여 이해하기 쉽게 만듬
- Model : Data & Logic
- Optional 옵셔널
- ? => 이 값에 nil은 포함될 수도 있다.
- . ! => 이 변수엔 Nil 값이 들어갈리가 없다.
- func checkAnswer(_ userAnswer: String) {}. => _는 external parameter 외부에서 해당함수에 값넣을때 사용하는데 _ 하면 따로 외부에서 해당 함수사용시 파라미터 이름 입력안해줘도 됨. userAnswer는 internal parameter라 함수 내부에서 사용하는 파라미터명이다.
- 코코아 터치 프레임워크?
- 프레임워크는 앱의 뼈대를 만들어 주는 것
- 보통 iOS개발할 때 이 코코아터치 프레임워크를 사용 많이함. => UIKit, Foundation, Coredata, MapKit등이 있음
출처:
https://medium.com/@zieunv/cocoa-touch-framework-bf78307c4a51
(iOS) Cocoa Touch Framework
iOS 애플리케이션 개발환경 토대인 코코아 터치 프레임워크’’
medium.com
[Swift] iOS 프레임워크 구조
iOS의 기본적인 구조는 이렇게 이루어져있어요 각 계층별로 하나하나 살펴볼게요 우선 최상위에 Cocoa / Cocoa Touch 가있는데 차이가뭘까요?? Cocoa라는 단어가 붙으면 우선 Objective-C Runtime을 기반으
nsios.tistory.com
'[iOS] App Development' 카테고리의 다른 글
[iOS] 기본 개념 정리 #3 : Segues, Multi-Screens, MVC 적용, Adopting MVC Pattern, Optional Binding, Optional Chaining (0) | 2021.11.01 |
---|---|
[iOS] 기본 개념 정리 #2 : UISlider, Struct VS Class, ViewController (0) | 2021.10.30 |
[Swift/iOS] Functions and Return / Typealias / Compound Type (0) | 2021.03.09 |
Sets (0) | 2021.03.08 |
[iOS/Swifit] Dictionary 사용법 (0) | 2021.03.08 |