전체 글

iOS/Swift

[iOS] 함수형 언어 Swift - 일급 함수

Swift는 객체지향 언어이자 함수형 언어이다. 함수형 언어가 되기 위해서는 일급 함수의 조건을 만족해야 한다. Swift에서 Closure는 매우 중요한 개념인데, 이를 이해하기 위해서는 일급함수의 개념을 이해하는 것이 필수이다! 일급 객체의 조건 1. 객체가 런타임에도 생성이 가능해야 한다 2. 인자값으로 객체를 전달할 수 있어야 한다 3. 반환값으로 객체를 사용할 수 있어야 한다 4. 변수나 데이터 구조 안에 저장할 수 있어야 한다 5. 할당에 사용된 이름과 관계없이 고유한 구별이 가능해야 한다 함수가 위 조건을 만족하면 이를 일급 함수(First-Class Function)이라고 하고, 이 언어를 함수형 언어로 분리한다. 즉 함수를 객체처럼 취급하는 게 함수형 언어의 특징인 것이다! 일급 함수의 ..

iOS/Swift

[iOS] 프로토콜 (Protocol )

Swift에서 프로토콜은 Java, C#과 같은 객체지향 언어의 인터페이스와 거의 같은 개념이다. 프로토콜에 대해 알아보도록 하자. 프로토콜 프로토콜은 클래스나 구조체의 설계도로, 클래스나 구조체가 구현해야 할 메소드와 프로퍼티 등으로 구성된다. 프로토콜 사용 이벤트 발생시 콜백 메소드 호출을 위한 Delegate pattern을 구현할 때 프로토콜을 사용한다. 프로토콜은 클래스나 구조체의 명세만 정의하고 기능을 구현하지 않는다. 프로토콜의 명세만 노출하고 구현체의 메소드나 프로퍼티를 은닉한다 클래스, 구조체 구현시 프로토콜을 이용하여 공통된 메소드, 속성을 정의할 수 있다. 하나의 타입으로 사용할 수 있다. 따라서 메소드의 파라미터, 리턴 타입으로 사용될 수 있으며 상수 변수의 타입으로도 사용할 수 있..

iOS/Swift

[iOS] Dark mode 사용하지 않기 (Light mode 강제 설정하기 )

앱에서 다크모드를 사용하지 않으려면 info.plist 열기 Information Property List 하위에 "Appearance" 키 추가하기 Information Property List 칸 위에 마우스 오버 하면 + 버튼이 보이고, + 버튼을 눌러 키를 추가할 수 있다. Appearance Key의 Value로 "Light"를 설정한다.

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

듀IT
듀 IT