전체 글 81

JSON 파싱이 되지 않을 때

Unsplash에 있는 이미지 목록을 불러올 예정이었다. 데이터 통신을 통하여 이미지 목록을 불러올 것이었기 때문에 JSON 형태로 주어진 데이터에 맞게끔 Model을 만들고 주어진 방법에 맞게끔 통신을 해야했다. 홈페이지에서 주어진 설명대로 method는 GET으로 설정하였고, parameter는 따로 만들지 않고 위처럼 URL에 같이 넣어주었다. 필요한 parameter는 나의 API key이고 옵션값을 가지는 parameter는 page와 per_page이다. 설명이 적혀진 문서에 있는대로 데이터 통신 준비를 마쳤다고 생각하여 실행을 눌러본 결과, 무언가 잘못 설정을 하였는지 데이터 통신에 실패했다고 나오게 되었다. (흑흑) 아는 분의 헬프로 문제점을 찾게 되었는데... 예상치 못하게도 model에..

어바웃라멘 지원 / 개인 정보 처리 방침

문의 이메일 : dt95@naver.com 어바웃라멘 관련해서 문의사항이나 추가로 있었으면 하는 기능이 있다면 이메일을 남겨주세요. 어바웃라멘은 개인정보보호법에 따라 이용자들의 개인정보 보호 및 권익을 보호하고자 다음과 같은 처리방침을 두고 있습니다. 당사는 개인정보처리방침을 개정하는 경우 앱 화면 및 웹사이트 공지사항을 통하여 공지할 것입니다. ​ 1.개인정보의 처리 목적 : 당사에서 개인정보를 별도로 저장하거나 이용하지 않습니다. ​ 개인정보 파일 현황 당사는 별도의 개인정보 파일을 사용하지 않으며 저장하지도 않습니다. 당사는 쿠키를 저장하지 않으며 이용하지 않습니다. 이용자가 이에 대해 의문이 있다면 해당 서비스(애플 및, 각 광고 미디어)로 직접 연락해야 합니다. ​ 개인정보의 처리 및 보유기간 ..

iOS

나의 커밋 규칙

커밋 키워드 ADD : 새로운 내용 추가 MOD (=Modify): 기존 내용 변경 DEL (=Delete): 기존 내용 삭제 UI : 새로운 뷰 추가 ex1 ) [UI] MainView : 뷰 생성 완료 [ADD] UIMainViewController : 테이블뷰 추가 ex2 ) UI : MainView 생성 완료 MOD : 코드 컨벤션 정리 및 extension 분리 참고 삭제만 다 DEL 파일 삭제, 함수 삭제, 구조체/클래스 삭제. 변경이나 업데이트는 DEL이 아님!!! UI 추가 수정은 UI, 나머지는 ADD, MOD UI 이외의 추가사항은 ADD UI 이외의 수정사항은 MOD

iOS

Codable에 대하여 알아보자

Codable의 정의 : JSON 데이터를 간편하고 쉽게 Encoding / Decoding 할 수 있게 해준다. 서버와 데이터를 주고 받을 때, 주로 JSON으로 주고 받게 되는데, 라이브러리(SwiftyJSON)와 직접 다루는 것보다 더 쉽게 다룰 수 있게 된다. Codable은 Encodable과 Decodable을 준수하는 프로토콜이다. Struct, Class, Enum은 모두 Codable을 채택할 수 있다. (1) Encoding 내가 원하는 Struct, Class, Enum의 인스턴스를 JSON 형태의 Data로 만들어주는 것이다. Codable을 이용해 JSON으로 Encoding 하고 싶을 경우, 반드시 Codable을 이라는 Protocol을 준수하고 있어야 한다. import Fo..

iOS

Realm에 대하여 알아보자

Realm(램)은 모바일에 특화된 NoSQL 데이터 베이스로 Swift, Objective-C, Java, Kotlin 등 다양한 SDK를 제공한다. iOS에서 Realm을 사용할 경우, UserDefaults와 CoreData를 대체해 Persistent data를 저장하고 관리할 수 있다. Realm 사용법 https://github.com/realm/realm-swift GitHub - realm/realm-swift: Realm is a mobile database: a replacement for Core Data & SQLite Realm is a mobile database: a replacement for Core Data & SQLite - GitHub - realm/realm-swift..

iOS

RGB로 색상을 지정하는 법

지정색에는 없는 버건디색을 가져오고 싶어서 RGB를 이용하였다. 작년에 했던 카타르 월드컵의 상징색은 버건디 색이었고 해당 색을 가져와 뉴스 관련 탭을 만들고자 기존에 있던 색을 찾아보았으나 없어서 RGB로 버건디 색을 만들어주기로 했다. RGB에 적혀있는 값을 가져오면 되는데 이 때, 각각의 값을 255.0으로 나눠줘야 한다. 그리고 alpha는 1.0으로 지정. let color = UIColor(red: 117/255.0, green: 18/255.0, blue: 54/255.0, alpha: 1.0) TabBar의 배경색으로 지정을 한다. bar.backgroundView.style = .flat(color: color) 보다시피 TabBar의 색이 버건디 색으로 잘 입혀졌다.

iOS

App의 생명주기는 뭘까?

App의 생명주기 5가지 App의 생명주기는 5가지가 있다. App의 생명주기는 not running, foreground의 inactive, foreground의 active, background, suspended가 있다. (1) not running App이 실행되지 않았거나, 아예 꺼졌을 때 동작하지 않는 상태를 뜻한다. (2) foreground의 inactive foreground의 inactive는 App이 실행되고 foreground 상태에 돌입했지만 이벤트를 받지 않는 상태이다. App의 전환 상태에 잠깐 머무르는 단계라고 볼 수 있다. (3) foreground의 active foreground의 active는 foreground 상태에 있고 이벤트를 받고 있는 상태이다. (4) bac..

Hashable에 대하여

해쉬는 해쉬 테이블을 통해 Key - Value 로 값을 지정한다. 해쉬 테이블은 내부적으로는 배열로 구성되어 있다. 특정 Key - Value를 저장한다고 하면, 해당 Key를 해쉬 함수란 것을 통해 해시를 하고, 결과 값인 해시 주소 값에 해당하는 해쉬 테이블 슬롯에 Value를 저장한다. 1. 구조체 struct Human: Hashable { let name: String let age: Int } let myDict: [Human: Int] = [:] 구조체의 경우, 간단하다. Equatable과 마찬가지로 만약 구조체 내 프로퍼티가 모두 기본 자료형이므로, Hashable을 채택하는 것만으로 추가 구현 없이 사용이 가능하다. 2. 클래스 class Human { let name = "Sodeu..

iOS

UISearchController에 대하여

검색 창을 기반으로 상호작용하여 나온 검색 결과를 관리하는 뷰 컨트롤러이다. 검색 창을 만들 때에는 UISearchController를 이용하여 만들어준다. UISearchController가 SearchBar를 내포하고 있다. let searchController = UISearchController(searchResultsController: nil) self.navigationItem.searchController = searchController searchController.searchBar.placeholder = "책 이름을 입력해주세요." 만들어준 후에 네비게이션 아이템에 들어가 있는 searchController에 지정시켜주면 된다. 그리고, 검색창에 text를 입력할 때마다 tableV..

iOS

프로토콜의 기초에 대해서...

프로토콜 (Protocol) 프로토콜은 “약속”이라고 할 수 있다. 약속이라 하면, 내가 축구 선수단을 만들고 싶은데, 이 때 필요한 것들이 무엇인지 생각해보면 선수, 감독, 그리고 스폰서 등을 얘기할 수 있다. 그래서, 선수단을 만들 때 내가 직접 선수, 감독, 스폰서를 고르는 게 아니라 이러한 것들이 필요하다고 명시해놓는 것이 바로 프로토콜이라고 할 수 있다. 그러면 이런 약속들의 구현은 어디서 이루어지냐 하면, 바로 프로토콜이 채택한 클래스, 구조체, 열거형안에서 이들을 실제로 구현해 내게 되는 것이다. protocol FootballTeam { var player: String { get set } var manager: String { get set } var sponser: String { g..

iOS