Codable은 Swift4부터 지원되는 타입으로, Codable을 이용하면 간편하게 객체를 JSON으로 컨버팅 하거나 JSON을 객체로 컨버팅할 수 있다. Codable Apple 공식 문서의 Codable 정의는 다음과 같다. 자신을 외부타입으로 변환하거나 외부 표현에서 자신으로 변환할 수 있는 타입 여기서 말하는 외부표현은 대게 JSON을 말한다. 그리고 자신(itself)를 객체로 생각하면 된다. 자신을 객체로, 외부표현을 JSON으로 바꿔보면 다음과 같다. 객체를 JSON으로 변환하거나, JSON을 객체로 변환할 수 있는 타입 Codable은 Decodable & Encodable 프로토콜로 구성되어있다. typealias Codable = Decodable & Encodable Decodabl..
현상 UICollectionView에서 Delegate 메소드인 didSelectItemAt 메소드를 구현했는데 이벤트가 들어오지 않았다. Breakpoint를 걸어도 걸리지 않았다. UICollectionView 객체의 delegate와 ViewController도 잘 연결되어 있었다 Storyboard에서 collectionView의 'User Interaction Enabled'도 잘 체크되어 있다. 원인 CollectionView가 속한 부모 view에 Tap Gesture Recognizer가 추가되어있었다. 발생한 터치 이벤트가 Tab Gesture Recognizer로 인해 view로 터치 이벤트가 전달되지 않았기 때문에 didSelectAt 메소드가 수행되지 않았다. UIGestureRec..
enum(1): https://dew-it.tistory.com/59 Associated Values (연관 값) Swift의 enum 객체의 멤버와 각 값은 객체 선언 시점에 정의된다. 즉 컴파일 시점에 enum 멤버의 정의와 값이 고정된다. 그렇지만 값을 사용하는 시점, 즉 런타임 시점에 보조값을 할당할 수도 있다. 이러한 보조값을 Associated Values라고 부른다. enum ImageFormat { case JPEG case PNG (Bool) case GIF(Int, Bool) } var newImage = ImageFormat.PNG(true) newImage = .GIF(256, false) 이미지 포맷 중 png는 투명값을 설정할 수도 있고 하지 않을 수도 있다. 이때 bool 타입..
Enum이란? Enumeration의 약어로, 하나의 카테고리로 묶을 수 있는 데이터들로 구성된 자료형 객체이다. 클래스, 구조체, 딕셔너리도 비슷한 데이터들을 하나의 카테고리로 묶은 자료형이다. 그리고 사용하기 위해서는 매번 필요할 때마다 인스터스를 생성하여 데이터에 값을 '할당'하여 사용하여야 한다. 반면 Enum은 인스턴스를 생성할 수 없다. 그리고 데이터들은 enum을 정의하는 시점에 같이 정의된다. 쉽게 말하면 enum은 데이터 저장을 위한 자료형 객체가 아니고, 타입 정의를 위한 자료형 객체인 것이다. 그렇기 때문에 객체의 데이터 값을 '할당'할 수 없으며 런타임 시점에 데이터의 값을 변경할 수 없다. enum에 정의된 데이터의 값을 바꾸고 싶으면 정의부를 직접 수정하여야 한다. 따라서 enu..
CGAffineTransform에 대해 알아보자. CGAffineTransform은 앞에 CG를 보고 유추할 수 있는 것처럼, Core Graphics 프레임워크에 속한 구조체이다. 참고로 Affine Transform은 한국말로 직역하면 아핀 행렬이다. 정의 애플 공식 문서를 보면 CGAffineTransform은 다음과 같이 정의할 수 있다. 2D 그래픽을 그리기 위한 아핀 변환 행렬로, 그래픽적으로 객체를 회전, 이동, 크기 조절, 기울기를 조절할 수 있다. (An affine transformation matrix for use in drawing 2D graphics. An affine transformation matrix is used to rotate, scale, translate, or..
드디어 30일 챌린지가 끝이 났다! 패스트캠퍼스에서 강의로 진행한 30일 챌린지 최종 후기를 다음 순서로 몇자 적어보고자한다. 강의를 듣게된, 선택한 이유 강의 듣기 전 나의 컴공 기본 지식 상태 강의를 듣고난 소감 강의의 장단점 강의를 추천하고 싶은 대상 패스트캠퍼스 30일 챌린지를 마치며 를 듣게 된, 선택한 이유 2020년 겨울, 윈도우 프로그래밍 개발자로 개발을 1년 정도 하였을 때이다. PC 소프트웨어 그리고 회사의 제품 특성상 특수 목적을 가진 사람들만이 우리가 만든 소프트웨어를 사용하는데, 이부분이 아쉬웠던지라 좀 더 사람들에게 접근성이 높은 제품을 개발해보고 싶다는 마음이 들었다. 그러곤 생각을 해봤을 때 모든 사람이 모바일 기기를 소유하고 있기 때문에 앱 개발이 접근성이 높다는 판단을 하..
Custom Cell 우리가 원하는 대로 TableView Cell을 커스텀하는 것이다. 먼저 CustomCell을 위한 class를 선언하고, UITableViewCell 프로토콜을 채택한다. class ListCell: UITableViewCell { @IBOutlet weak var imgView: UIImageView! @IBOutlet weak var nameLabel: UILabel! @IBOutlet weak var bountyLabel: UILabel! } 그리고 스토리보드에서 TableCell의 CustomClass를 해당 ListCell로 바꿔준다. 그리고 Object Library를 이용하여 Cell을 커스텀한다. import UIKit class BountyViewController..
UITableView 거의 대부분의 앱이 리스트 형태로 아이템을 나열해서 보여주고 있다. 이때 iOS에서 사용하는 방법은 UITableView이다. UITableView는 여러 아이템을 리스트 형태로 보여주고 싶을 때 사용한다. UITableView는 컬럼이 오직 하나이다. TableViewCell을 통해 아이템의 내용을 표시하고 구성한다. TableViewCell은 Recycle하여 사용한다. 즉 스크롤할 때마다 전에 생성해놓은 TableCell 객체를 이용하여 사용하는 것이다. UITableView Protocol 테이블뷰 서비스를 사용하기 위해 해야할 일 테이블뷰 셀은 몇개? 테이블뷰 어떻게 보여줄까? 테이블뷰 셀 클릭하면 어떻게 반응할까? UITableViewDataSource - 테이블뷰의 셀이..
designated initialization(지정 이니셜라이져) vs. convenience initialization(간편 이니셜라이져) 이니셜라이저의 3가지 규칙 DI는 자신의 부모의 DI를 호출해야한다. CI는 같은 클래스의 생성자를 꼭 하나 호출해야한다. CI는 궁극적으로는 DI를 호출해야한다. DI는 자신의 부모의 DI를 호출해야한다. // 학생인데 운동선수 class StudentAthlete: Student { var minimumTrainingTime: Int = 2 var trainedTime: Int = 0 var sports: [String] init(firstName: String, lastName: String, sports: [String]) { // Phase1 self.sp..