iOS

iOS/Swift

[iOS] Codable - JSON Encoding 과 Decoding 하기

Codable은 Swift4부터 지원되는 타입으로, Codable을 이용하면 간편하게 객체를 JSON으로 컨버팅 하거나 JSON을 객체로 컨버팅할 수 있다. Codable Apple 공식 문서의 Codable 정의는 다음과 같다. 자신을 외부타입으로 변환하거나 외부 표현에서 자신으로 변환할 수 있는 타입 여기서 말하는 외부표현은 대게 JSON을 말한다. 그리고 자신(itself)를 객체로 생각하면 된다. 자신을 객체로, 외부표현을 JSON으로 바꿔보면 다음과 같다. 객체를 JSON으로 변환하거나, JSON을 객체로 변환할 수 있는 타입 Codable은 Decodable & Encodable 프로토콜로 구성되어있다. typealias Codable = Decodable & Encodable Decodabl..

iOS/Swift

[iOS] UICollectionView의 didSelectItemAt 메소드가 작동하지 않을 때 (Tap Gesture Recognizer)

현상 UICollectionView에서 Delegate 메소드인 didSelectItemAt 메소드를 구현했는데 이벤트가 들어오지 않았다. Breakpoint를 걸어도 걸리지 않았다. UICollectionView 객체의 delegate와 ViewController도 잘 연결되어 있었다 Storyboard에서 collectionView의 'User Interaction Enabled'도 잘 체크되어 있다. 원인 CollectionView가 속한 부모 view에 Tap Gesture Recognizer가 추가되어있었다. 발생한 터치 이벤트가 Tab Gesture Recognizer로 인해 view로 터치 이벤트가 전달되지 않았기 때문에 didSelectAt 메소드가 수행되지 않았다. UIGestureRec..

iOS/Swift

[iOS] Swift - enum (2)

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 타입..

iOS/Swift

[iOS] Swift - enum (1)

Enum이란? Enumeration의 약어로, 하나의 카테고리로 묶을 수 있는 데이터들로 구성된 자료형 객체이다. 클래스, 구조체, 딕셔너리도 비슷한 데이터들을 하나의 카테고리로 묶은 자료형이다. 그리고 사용하기 위해서는 매번 필요할 때마다 인스터스를 생성하여 데이터에 값을 '할당'하여 사용하여야 한다. 반면 Enum은 인스턴스를 생성할 수 없다. 그리고 데이터들은 enum을 정의하는 시점에 같이 정의된다. 쉽게 말하면 enum은 데이터 저장을 위한 자료형 객체가 아니고, 타입 정의를 위한 자료형 객체인 것이다. 그렇기 때문에 객체의 데이터 값을 '할당'할 수 없으며 런타임 시점에 데이터의 값을 변경할 수 없다. enum에 정의된 데이터의 값을 바꾸고 싶으면 정의부를 직접 수정하여야 한다. 따라서 enu..

iOS/Swift

[iOS] CGAffineTransform - 뷰 객체의 이동, 회전, 크기 조절

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..

iOS/iOS 앱 개발 올인원 패키지 Online

[iOS 앱 개발 올인원 패키지 Online] 패스트캠퍼스 챌린지 최종 후기

드디어 30일 챌린지가 끝이 났다! 패스트캠퍼스에서 강의로 진행한 30일 챌린지 최종 후기를 다음 순서로 몇자 적어보고자한다. 강의를 듣게된, 선택한 이유 강의 듣기 전 나의 컴공 기본 지식 상태 강의를 듣고난 소감 강의의 장단점 강의를 추천하고 싶은 대상 패스트캠퍼스 30일 챌린지를 마치며 를 듣게 된, 선택한 이유 2020년 겨울, 윈도우 프로그래밍 개발자로 개발을 1년 정도 하였을 때이다. PC 소프트웨어 그리고 회사의 제품 특성상 특수 목적을 가진 사람들만이 우리가 만든 소프트웨어를 사용하는데, 이부분이 아쉬웠던지라 좀 더 사람들에게 접근성이 높은 제품을 개발해보고 싶다는 마음이 들었다. 그러곤 생각을 해봤을 때 모든 사람이 모바일 기기를 소유하고 있기 때문에 앱 개발이 접근성이 높다는 판단을 하..

iOS/iOS 앱 개발 올인원 패키지 Online

[iOS] 패스트캠퍼스 챌린지 30일차 - UITableView(3)

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..

iOS/iOS 앱 개발 올인원 패키지 Online

[iOS] 패스트캠퍼스 챌린지 29일차 - UITableView(2)

UITableView를 사용해보자. import UIKit class BountyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } // UITableViewDataSource func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 2 } func tableView(_ tableView: UITableView, cellForR..

iOS/iOS 앱 개발 올인원 패키지 Online

[iOS] 패스트캠퍼스 챌린지 28일차 - UITableView(1)

UITableView 거의 대부분의 앱이 리스트 형태로 아이템을 나열해서 보여주고 있다. 이때 iOS에서 사용하는 방법은 UITableView이다. UITableView는 여러 아이템을 리스트 형태로 보여주고 싶을 때 사용한다. UITableView는 컬럼이 오직 하나이다. TableViewCell을 통해 아이템의 내용을 표시하고 구성한다. TableViewCell은 Recycle하여 사용한다. 즉 스크롤할 때마다 전에 생성해놓은 TableCell 객체를 이용하여 사용하는 것이다. UITableView Protocol 테이블뷰 서비스를 사용하기 위해 해야할 일 테이블뷰 셀은 몇개? 테이블뷰 어떻게 보여줄까? 테이블뷰 셀 클릭하면 어떻게 반응할까? UITableViewDataSource - 테이블뷰의 셀이..

iOS/iOS 앱 개발 올인원 패키지 Online

[iOS] 패스트캠퍼스 챌린지 27일차 - Class.생성자(3)

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..

듀IT
'iOS' 카테고리의 글 목록 (2 Page)