⭐️ 개발
[iOS] Alamofire Multipart/formdata를 통한 이미지 서버 통신
🌈 Multipart/formdata 형식를 통한 이미지 POST 방식 → 멀티파트는 Alamofire에서 제공해주는 기능으로 이미지를 data로 전환해서 전송하는 방식입니다. multipart/form-data 는 파일 업로드가 있는 양식요소에 사용되는 enctype 속성의 값중 하나이고, multipart는 폼데이터가 여러 부분으로 나뉘어 서버로 전송되는 것을 의미합니다. 우선, 서버에서 넘겨준 API 문서입니다. 👀 주의해서 봐야 할 것은 Content-Type 이 multipart/form-data 라는 점입니다. 따라서, request header 배열 영역에 잘 입력해줘야 합니다. 👀 두 번째로 Body 부분에서 이미지를 제외하고도 우리가 업로드 해줄 데이터가 있을 경우에는 multipart를..
[iOS] DateFormatter
노션으로 보기 🗳 오늘은 FSCalendar를 공부하기 위해서 DateFormatter를 먼저 공부해보려고 해요! DateFormatter는 날짜의 형식을 바꿔줄 때 사용합니다. 그러니까 날짜를 어떻게 보여줄 건지를 정하고 싶을 때 사용해요! 그럼 한 번 어떻게 쓰는지 알아볼까요? 우선 현재 날짜 및 시간을 출력해주기 위해서 아래와 같은 코드가 필요합니다. let now = Date() → Date() 자료형에 맞는 인스턴스를 생성해 현재 날짜와 시간을 알 수 있는데 Date에는 다양한 이니셜라이저가 있어요. 하나하나 차례대로 살펴보면,,, 1 ) init(timeIntervalSinceNow: TimeInterval) → 현재 시간을 기준으로 TimeInterval 만큼..
[iOS] Expandable TableView Cell 만들기
📦 Expandable TableView Cell 만들기 마켓컬리 클론코딩을 하다가 카테고리를 접었다가 펴주는 테이블 뷰 기능을 구현하게 되어 공부한 내용을 정리해보려고 합니다! 처음에는 어려울 것 같았는데 생각보다 엄청 간단하게 구현이 되어서 라이브러리를 쓰지 않아도 되겠다 싶었어요! (맨 아래로 내려가면 full code 보실 수 있습니다!) 테이블 뷰를 위한 세팅을 해주세요~~ 첫 번째로, 테이블 뷰에 들어갈 데이터를 위한 구조체를 하나 만들어 줍니다. struct cellData { var opened = Bool() var title = String() var sectionData = [String]() } - opened는 테이블 뷰 셀이 접혔는지 펴졌는지를 확인해주기 위한 변수입니다. - t..
[iOS] UIColor Extension 파일 만드는 법 (feat.Zeplin)
😊 UIColor Extension 파일 만드는 법 (feat.Zeplin) 우왕 ! UIColor Extension 적용해서 넣어주는 거 세상 쉬워서 정리하게 됐습니다! 이건 디자이너 선배님들이 얼마나 네이밍을 잘해주냐에 따라서 우리 클라들이 그저 편해지냐,, 아니면 고생하냐,, 일 뿐이야요. Zeplin에 가보면 Styleguide가 있을 겁니다! 거길 보면 바로 오른쪽 회색창에 코드로 친절하게 색상값이 정리되어 있는 거 보이죠? 디자이너분들이 네이밍 해주시면 그게 코드로 바로 적용되더라구요... 제플린 짱! 피그마가 싫고 제플린이 좋은 이유!! 저 코드를 그대로 긁어서 Xcode에서 Command + N 해서 Swift 파일 하나 맹그러서 네이밍 [ UIColor + Extension ] 으로 해주..
[iOS] NSMutableAttributedString : 문자열 특정 부분 색 바꿔주고 싶을 때
노션에서 보면 더 편해요 -> 🦋🦋🦋 😊 NSMutableAttributedString : 문자열 특정 부분 색 바꿔주고 싶을 때 📚 사용 방법 사진처럼 이런 유아이를 만들어 주려고 합니당. @마켓컬리 부분만 보라색인 라벨을 만들 겁니다! 제가 공부한 결과... 방법이 크게 2가지 정도 있는 것 같아여 이건 우선 1번째 방법인데 전 이걸 더 자주 쓰게 될 것 같습니다! 1-1. (첫 번째 방법) 특정 문자 색깔에 변화를 주고 싶은 경우 let footerLabel : UILabel = { let label = UILabel() label.text = "카카오톡 @마켓컬리 친구 추가하고 소식과 혜택을 받아보세요." label.font = UIFont.systemFont(ofSize: 12, weight: ..
[iOS] Then / DuctTape 라이브러리 사용기
노션에서 보면 더 편해요 -> 🦋🦋🦋 Then / DuctTape 라이브러리 사용기 📚 목차 1️⃣ Then 라이브러리 사용기 2️⃣ DuctTape 라이브러리 사용기 3️⃣ 나의 느낀 점... 이랄까? 나 이제 뭐쓰징? 🔥 Then 라이브러리를 사용해보자. https://github.com/devxoul/Then → closure를 사용해서 원하는 인스턴스를 생성해서 처리를 해주는 거라고.. 합니다... 와오.. 그 유명한 전수열 아요 개발자님이 맹그셨대요!!! 저는 귀찮아서 일단 시험삼아 써보려고 podfile에 입력해준 게 아니라 그냥 SPM으로 설치해줬습니당 ^^* 만약 코코아팟을 쓰고 있다면.. 걍 거기다가 한 방에 해줘도 좋을 거 같슴둥둥.. 스위프트 패키지 매니저 진짜 세상 편한데... 왜 ..
[Swift] Escaping Closure : 탈출 클로저란?
📚 탈출 클로저 Escaping Closure 스위프트에서는 함수의 파라미터로 전달된 클로저는 기본적으로 해당 함수 내부에서만 사용이 가능합니다 -> 이걸 탈출 불가 상태라고 하죠. 원래 클로저는 참조 타입이며 변수, 상수 등으로 저장, 전달 인자로 저장이 가능한 형태이지만 파라미터로 받은 클로저는 직접 실행만 가능하고, 외부 변수나 상수에 대입이 불가능한 형태입니다. 클로저가 파라미터로 넘어가게 되면 해당 함수가 끝나서 리턴되기 전에 클로저가 실행이 됩니다. 그리고 해당 함수가 실행 완료되면 클로저의 사용이 불가능하게 됩니다. 하나의 예시를 살펴볼까요? class ViewController: UIViewController { var sampleClosure : () -> Void = {} overrid..
[iOS] Alamofire를 통해 서버와 통신 해보기 - GET
솝트 4주차 세미나 복습 정리를 위한 글입니다. 다소 두서없는 글임이 예상되오니 그냥 봐주세오. [ Alamofire를 통해 서버와 통신 해보기 - GET ] 📚 데이터를 가져오는 GET 방식에서는 서버에서 일방적으로 데이터를 요청해서 받아오는 식입니다. 📚 이때 파일 별로 나눠서 단계 별로 생각해서 정리해보자면 1. NetworkResult.swift : 네트워크 결과를 나누기 위해서 enum 형으로 선언해줍니다. 2. XXXDataModel.swift : JSON 데이터를 담아내기 위해 데이터 구조체를 만들고 Codable 프로토콜을 채택합니다. 3. XXXXService.swift : 실질적인 네트워크를 처리해주는 부분으로 escaping closure를 통해서 결과값을 뷰컨에 전달합니다. 4. X..
[Swift] 싱글턴 패턴 : Singleton Pattern이란?
📚 싱글턴 패턴 Singleton Pattern 특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형입니다. 예를 들어서, 유저의 정보를 저장하는 클래스가 있다고 할 경우에 VC1, VC2, VC3에서 각각 id / pw / name을 따로 따로 가져온다고 하면 이런 식으로 가져오게 됩니다. 각각의 인스턴스에서 정보가 따로 따로 저장되고 VC1에서는 pw / name 정보가 nil VC2에서는 id / name 정보가 nil VC3에서는 id / pw 정보가 nil 인 상태가 됩니다. 그렇지만 우리는 한 인스턴스 안에서 모든 정보 (id / pw / name) 가 저장되는 걸 필요로 합니다. 이렇게 해주기 위해서는 해당 인스턴스를 최초 생성 시에 전역으로 저장해두고 그 이..
[iOS] 데이터 직접 전달 방식(3) - Delegation을 통해 전달
뷰를 전환하며 데이터를 전달하는 방식은 크게 2가지로 나뉩니다. 바로 직접 전달과 간접 전달이죠! ▶️ Segue prepare 메소드를 통해 전달하는 방식 ▶️ Property에 접근해서 전달하는 방식 그 중 Delegation을 통해 전달하는 방식은 직접 전달 방식에 해당합니다. 오늘은 요 Delegation을 통한 데이터 전달 방식을 공부해보려고 합니다. 그렇기 위해서는 Protocol과 Delegate 패턴에 대해 미리 공부를 해야 합니다. 📚 Protocol과 Delegate Pattern Delegate는 Protocol 형태로 구현되기 때문에 이 둘은 뗄래야 뗄 수 없는 관계래요! 그렇다면 프로토콜은 뭘까요? 한마디로 말하자면 메뉴얼/설명서 에요! 메뉴얼을 보면 어떻게 하라고..
[iOS] 데이터 직접 전달 방식(2) - Segue prepare 메소드를 통해 전달
뷰를 전환하며 데이터를 전달하는 방식은 크게 2가지로 나뉩니다. 바로 직접 전달과 간접 전달이죠! ▶️ Property에 접근해서 전달하는 방식 그 중 Segue prepare 메소드를 통해 전달하는 방식은 직접 전달 방식에 해당합니다. Segue prepare 메소드를 통해 전달하는 방식에 대해 공부를 해볼 겁니다! Segue가 뭘까요? 세그가 뭘까요?? 아래 사진의 화살표를 세그라고 불러요! 스토리보드에서 자주 봤죠? 맞아요 씬과 씬을 연결해주면서 자주 봤을 거에요! 세그는 스토리보드에서 뷰 컨트롤러에서 다른 뷰 컨트롤러로 화면 전환을 해주기 위해 코드를 사용하지 않고 구현해주기 위해 사용하는 도구에요. 세그웨이(Segueway)를 짧게 부른 말이죠. 세그를 통한 데이터 전달을 해주기 위해서 네비게이..
[iOS] 데이터 직접 전달 방식(1) - Property를 통해 전달
뷰를 전환하며 데이터를 전달하는 방식은 크게 2가지로 나뉩니다. 바로 직접 전달과 간접 전달이죠! ▶️ Segue prepare 메소드를 통해 전달하는 방식 그 중 Property에 접근하여 전달하는 방식은 직접 전달 방식에 해당합니다. 프로퍼티에 접근해서 전달하는 방식에 대해 공부를 해볼 겁니다! 우선, 프로퍼티란 무엇일까요? 스위프트에서 프로퍼티는 클래스, 구조체, 열거형과 연관되어 있는 정보/값을 의미합니다. 쉽게 예시를 들어보자면, 이렇게 Shinee라는 클래스 내에 [ fandom ] 이라는 문자열 변수와 [ member ] 라는 정수형 변수가 있는데요. 이 fandom과 member 변수를 우리는 Shinee 클래스의 프로퍼티라고 합니다. 어느정도 이해가 가시져? 어쨌든! 이 프로퍼티를 통해 ..
[Swift] 클래스(Class) /구조체(Struct) /열거형(Enum) 정리 + 차이점
📚 목차 1️⃣ 열거형 Enum 2️⃣ 구조체 Struct 3️⃣ 클래스 Class 4️⃣ 차이점 Swift는 객체지향 프로그래밍 언어입니다. 그렇기 때문에 우리는 클래스, 구조체, 열거형에서 각각의 타입을 가지는 인스턴스(=객체)를 생성해서 사용할 수 있습니다. -> 이 부분에서 많이들 붕어빵과 붕어빵틀로 인스턴스와 클래스를 설명하곤 하죠. 클래스, 구조체, 열거형의 인스턴스를 사용하기 위한 준비 작업을 이니셜라이저 즉, 초기화라고 합니다. 자,, 왜 여기에 이렇게 주저리 글을 적었냐... 그것은 제가 이해가 안갔기에 정리를 해봤습니다.. 자 본론으로 들어가 열거형, 클래스, 구조체가 뭔지 어떤 경우에 열거형/구조체/클래스를 쓰는지 등의 차이점도 정리해보겠습니다! 1️⃣ 열..
[iOS] UIPanGestureRecognizer 사용해서 모달화면 아래로 dismiss하기
UIPanGestureRecognizer를 사용해 모달창 아래로 스와이프해 dismiss하기 📚 UIPanGestureRecognizer는 UIGestureRecognizer의 하위클래스로 화면을 탭 후에 상하좌우로 Drag하는 제스쳐를 통해 화면에 변화를 줄 때 사용합니다. 이 클래스의 클라이언트는 액션 메소드를 통해서 현재 제스쳐의 변화(translation)와 속도의 변화(velocity)를 줄 수 있다고 합니다. UIPanGestureRecognizer is a concrete subclass of UIGestureRecognizer. Clients of this class can, in their action methods, query the UIP..
[iOS] velocity.y < 0 이면 왜 방향이 up일까?
UIPanGestureRecognizer 클래스를 쓰면서 이해가 안가는 것이 발생됐다;;; 바로 velocity라는 함수를 사용해서 나의 imageView가 어느 방향에 위치했는지 CGPoint 값으로 알려줄 때 왜..?!!!! velocity.y abs(velocity.y) { velocity.x < 0 ? print("..