본문 바로가기

MOBILE

(49)
[swift] Property Wrapper: what does @ mean in swift? Property Wrapper 그게 왜 필요한데 swift에서는 struct, calss의 프로퍼티의 종류가 두 가지이다. 저장 프로퍼티 vs 연산 프로퍼티 로 구분된다. 이때 연산 프로퍼티는 값에 접근할 때 계산을 하거나 변환 작업을 해야할 때 사용된다. 즉 값을 검사하는 수문장이 있는 프로퍼티이다. 예를 들어, 다음과 같이 값의 최대 범위를 계산하여 막아주는 연산 프로퍼티가 있다고 생각하자. struct A { private var realValue: Int = 0 var value: Int { get { return realValue } set { if (realValue > 100) { realValue = 100 } else if (realValue < 0) { realValue = 0 } el..
[iOS] URLSession을 사용하여 POST method 통신하기 HTTP의 기본 구조 HTTP는 요청을 일정한 형식의 텍스트 기반 메세지로 변환한 메세지 형식을 말한다. 크게 요청, 응답으로 구분된다. 메세지는 모두 다음과 같은 구조이다. Line - Header - Body Line은 메세지의 가장 기본적인 내용이 담긴다. 예를 들어, 응답 or 요청인지 구분 여부, 메세지 전송 방식, 상태 정보 등이다. Header 는 메세지 본문에 대한 메타 정보가 담긴다. Body는 실제 보내고자 하는 메세지 내용이 담긴다. 이러한 메세지의 형식은 정형화 되어있다. 즉 형태가 고정되어 있다는 의미이다. 라인 영역은 반드시 한줄이어야 하며, 그 아래에는 여러줄의 헤더가 작성된다. 헤더와 바디 영역은 구분되어야 하기 때문에 한 줄의 공백이 들어간다. 말하자면 다음과 같은 구조이다..
Xcode + UIKit 으로 iOS 메모 앱 만들기 1. TODAY MEMO 안드로이드 개발을 계속 하다보니, 분명 필요해서 만든 앱인데 애플 유저라서 직접 사용하지 못하는 문제가 여러번 있었다. 이제 직접 사용가능한 앱을 만들어보고자 ios개발을 시작했다. 개발은 내가 만들어서 내가 무한으로 즐기는 것도 하나의 재미라고 생각하기 때문이다. 일단 현재 아이폰 기본 메모장의 위젯이 마음에 안들어서 위젯으로 사용가능한 메모장 앱을 만들고 싶었다. launch screen 디자인은 직접 했다. 물론 디자인이라고 할 것도 없이 그냥 아이패드로 그림 그린 것이다. 2. 개발 과정 Tools xcode + swift UIkit Table View Controller / Navigation Controller Core Data UserDefaults Alamofire..
[iOS] iOS의 UIApplicationDelegate의 life cycle method UIKit으로 ios 프로젝트를 만들면 AppDelegate.swift 파일을 자동으로 생성해준다. 파일을 열어보면 AppDelegate 클래스는 UIApplicationDelegate protocol을 구현하고 있음을 확인할 수 있다. 이 AppDelegate 클래스와 UIApplicationDelegate protocol 에 대해서 알아보자 c에서는 프로그램의 시작점인 entry point가 바로 main() 함수이다. 그렇다면 ios 에서의 entry point는 어디일까? 바로 UIApplicationMain() 함수이다. 이 함수는 앱의 핵심 객체를 생성하는 프로세스를 실행하고, UI를 읽고 커스텀 코드를 호출하는 등의 앱 생성 초기 과정을 담당한다. 이 객체를 통해 생성되는 객체가 바로 UIA..
[iOS] segue 객체를 이용한 화면 전환 처리하기 ios 에서는 다양한 방식으로 화면을 전환할 수 있다. 크게 4가지 정도이다. 화면 전환 방법에 따라 이전 화면으로 돌아가는 방법도 달라진다. 화면 전환 방법 1. 뷰를 전환하기 2. 뷰 컨트롤러를 전환하기 3. 네비게이션 컨트롤러에 의한 화면 전환 4. 세그웨이에 의한 화면 전환 1. 뷰 자체를 전환하기 뷰 자체를 전환하는 방법은 하나의 뷰 컨트롤러 안에 루트 뷰 두개를 두고 전환한다. 하지만 이는 뷰 컨트롤러:루트뷰 = 1:1 이라는 MVC 패턴을 벗어나므로 좋지 않다. 또한 뷰 컨트롤러의 루트 뷰를 가져와서 올릴 수도 있지만 이 또한 뷰의 소속 컨트롤러는 무엇인지 모호해지기 때문에 좋지 않은 방식이다. 2. 뷰 컨트롤러를 전환하기 뷰 컨트롤러를 전환하는 방식은 가장 많이 쓰인다. 이미 present..
[iOS] core data를 이용하여 데이터를 영구 저장하기 core data : application에서 모델 계층의 객체를 관리하는 데 사용하는 프레임워크 ios에서 데이터를 영구 저장하는 방법은 다양한데, 그 중에서도 core data는 애플이 코코아 개발환경을 통해 제공하는 In-Memory 방식의 데이터 관리 프레임워크이다. In-Memory 방식이므로 모든 데이터를 다루는 작업은 메모리에서 동작한다. (In-Memory 방식은 뒤에서 설명) 즉 읽고 쓰는 데이터들은 모두 메모리에 로드한 다음에 메모리에서 읽거나 쓰기 작업을 수행하고 그 결과를 저장소에 반영하는 것이다. 한마디로 영구 저장소에 직접 데이터를 쓰거나 읽는 일이 없다는 점이 SQLite와 다른 점이다. 그냥 개발자와 영구 저장소를 이어주는 프레임워크이다. core data의 데이터 저장 구조..
[iOS] UITableViewController delegate method 모아보기 UITableViewController : UIKit 에서 데이터를 리스트 형태로 보여주기에 적합한 view controller는 Table View Controller이다. 위와 같이 데이터를 리스트 형태로 표현 가능하여 직관적으로 데이터의 목록을 볼 수 있다. table view의 계층 관계는 다음과 같다. 테이블 뷰 컨트롤러 -> 테이블 뷰 -> 테이블 뷰 cell -> content view 이때 하나의 테이블 뷰에는 여러 개의 테이블 뷰 섹션이 있을 수 있다. 섹션은 그룹과 비슷하다. 이러한 table view controller 가 정의되어 있는 곳을 보면 다음과 같다. UITableViewController 는 UIViewController를 상속받고 UITableViewDelegate, U..
[iOS] Codable protocol을 사용하여 json data parsing하기 swift에서 json 데이터를 parsing 할 수 있는 방법은 여러가지이다. 그 중에서도 swift4 에 출시된 codable은 코드 단 5줄 이내로도 쉽게 json 데이터를 파싱할 수 있도록 해준다. 이에 대해 알아보자 애플 공식 문서를 살펴보면 codable은 type alias라고 되어있다. 즉 Codable = encodable + decodable 이다. 원래 swift에는 decodable, encodable 프로토콜 두가지를 모두 제공하였다. 이를 합친것이 codable이다. 이때 데이터를 encode, decode 한다는 것은 다음과 같은 의미이다. encode: 데이터를 원하는 프로토콜로 변환 decode: 데이터를 내가 사용하고자 하는 모델로 캐스팅 json을 예시로 들자면 다음과 ..