전체 글

전체 글

    Swift - Codable Protocol

    Codable Codable은 Swift의 Decodable과 Encodable프로토콜을 결합한 프로토콜이다. 이들은 사용자 정의 유형에 대한 데이터 디코딩 및 저장 또는 전송될 인코딩 데이터의 표준을 제공한다. JSON과 함께 Codable을 사용하면 데이터 개체를 반환하기 위해 코드 구문 분석에 필요한 모든 검사가 필요하지 않으며 데이터가 복잡해짐에 따라 다양한 복잡성을 처리하여 코드를 가능한 최소화하며 깔끔하게 유지한다. 이러한 코드는 읽기 쉬우며 유지관리가 가능하며 데이터가 복잡해 지면 해당 데이터를 Swift객체로 구문분석하는 코드가 많아지고 유지관리가 힘들어 진다. 예시를 들어보자. // JSON Data: { "id": 1234, "src": "//api.someHost.com/version..

    IOS - URL Session을 이용한 HTTP통신

    URL Session을 이용한 HTTP통신 웹 통신과 Protocol - 인터넷 상에서의 통신을 말한다.(소식을 전한다) - 많은 정보들이 주고 받기에 인터넷에는 엄격한 규약이 존재한다. 이것을 Protocol 이라고 부른다. ex) 메일을 주고받을때 - SMTP 파일을 주고받을때 - FTP 브라우저, 웹서버와 통신할 때 - HTTP HTTP(Hyper Text Transfer Protocol) - Hyper Text를 전송하기 위한 프로토콜 - HTML문서를 주고받을 때 사용 요청: request 응답: response 클라이언트에서 서버에 요청을 하면 그에 맞는 응답 결과를 돌려준다. Http패킷 헤더에는 보내는사람의 주소 받는사람의 주소, 생존시간 바디에는 우리가 전하고자하는 실제 내용이 담겨있다...

    IOS - Timer

    Timer: - 특정 시간이 지난 후에 이벤트를 발생시키거나 반복적인 주기로 특정작업을 수행하는등의 행위를 하는 이벤트. - Swift에서 Timer라는 클래스로 타이머를 구현할 수 있다. - GCDapi에있는 디스패치소스타이머로 구현할 수 있다. GCD(Grand Central Dispath api) - ( 작업을 병렬적으로 처리하기위해 애플이 제공하는 API) - 쓰레드를 만들거나, 관리해야하는 어려운 작업들을 맡아서 해줌. - GCD를 이용하면 개발자는 그저 태스크들이 담긴 큐를 만들고 그 큐를 GCD에 던져버리면 GCD가 모든 쓰레드를 관리해줌.

    IOS - ObserverPattern

    옵저버패턴: - 한 Object의 상태가 바뀌면 그 Object를 구독하는 다른 객체들에 연락이 가고 자동으로 내용이 갱신되는 디자인 패턴으로 1:N의 관계를 정의함. - 관찰중인 객체에서 발생하는 이벤트를 여러 다른 객체에 알리는 메커니즘을 정의할 수 있는 디자인패턴. - 다른 객체의 상태가 변경될 때 마다 어떤 이벤트를 실행하고 싶을 때 주로 사용. - 주로 MVC패턴에서 사용. - Model은 ViewController의 타입에 대해 알 필요 없이 상태가 변경될 때 마다 이를 ViewController에 전달. - 여러개의 ViewController가 하나의 Model의 변경사항을 사용할 수 있게 됨. 디자인 패턴들은 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합되는 디자인을 사용해야..

    IOS - NotificationCenter

    특정 개체가 NotificationCenter에 등록된 Event를 발생시키면 해당 Event를 처리하고 등록된 Observer들이 이Event에 대한 행동을 취하는 것. 앱 내에서 아무데서나 메세지를 던지면 앱 내에서 아무데서나 메세지를 받을수 있게 해주는 것 특정 개체가 Event를 발생시키는 것을Post라고 한다 옵저버를 등록해서 Post된 메세지를 받을 수 있다.

    IOS - addTarget, @objc

    @objc: Swift를 사용한 코드를 Objective-C코드와 상호작용 할 수 있게 쓰는 키워드. Swift를 사용한 코드에서 class나 method에 이 키워드를 붙이면 Objective-C와 Swift 코드에서 사용할 수 있다.. addTarget: func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControl.Event) target 오브젝트와 action메서드를 이어준다. 매개변수 target: action메서드가 호출된 개체를 지정 action: 호출할 작업 메서드를 식별하는 셀렉터(#selector), nil이 아니어야함. controlEvents: 어떠한 일이 발생하면 셀렉터 메서드를 호출할 것인지를 넘겨주어야..

    IOS - func touchesBegan

    override func touchBegan(_ touches: Set, with event: UIEvent?) 유저가 화면을 터치하면 호출되는 메서드 활용) override func touchesBegan(_ touches: Set, with event: UIEvent?) { self.view.endEditing(true) } 빈 화면을 누르면 키보드나 데이트픽커가 사라진다. 에디팅 모드가 끝난다.

    IOS - UserDefaults

    Runtime환경에 동작하면서 앱이 실행되는 동안 기본 저장소에 접근해 데이터를 기록하고 가져오는 역할을 하는 인터페이스 "키 - 밸류" 쌍으로 존재하며 앱 전체에 단 하나의 인스턴스만 존재하게됨 스위프트에서 제공되는 double, int, float, boolean와 NSdata, NSString, NSNumber, NSDictionary, NSArrary등 NS관련타입도 저장이 가능하다. 저장: userDefaults.set(value: Any?, forKey: String) value: Any? 에는 data를 넣어주고 forKey: String에는 data의 구분이되는 값을 넣어준다. ex) func saveTasks(){ let data = self.tasks.map{ [ "title": $0...

    UIKIT. Asset

    업데이트 예정입니다. 에셋엔 다양한 리소스를 추가하고 관리할 수 있습니다. 이미지리소스를 프로젝트에셋 카탈로그에 추가하려면 왼쪽 아래 더하기 버튼을 클릭하면 된다. 다양한 리소스를 추가할 수 있다. 이미지 셋을 추가하게되면 이런 모습의 공간이 나오게되는데 드래그앤 드랍으로 1x, 2x ,3x에 넣어주면 된다. 이미지셋엔 1x, 2x ,3x 모두 추가를 해주어야한다 예를들어 1x가 24px size라면 2x = 48, 3x = 72 사이즈의 이미지를 추가하면된다 다양한 크기의 이미지를 추가하는 이유는 다양한 해상도에서 깨지지 않는 이미지를 추가하기 위함이다.

    UIKIT. 화면간 데이터 전달.

    화면간 데이터 전달을 하려 할 때엔 화면전환이 가능해진 이후. 화면전환에서 사용했던 옵셔널 바인딩을 약간 수정해야한다. guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "Storyboard ID") as else { return } 옵셔널 바인딩을 해준 이유는 뷰를 클래스의 인스턴스화 해야하기 때문이다. 데이터 전달을 할 때에도 인스턴스화가 필요하지만 다른 방식의 접근이 필요하다. 옵셔널 바인딩과 다운캐스팅을 사용한다. guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "CodePushViewCon..