iOS/Swift

    [iOS] Firebase Cloud Messaging - APN

    기록용 1. firebase project 만들기 https://console.firebase.google.com/u/3/?hl=ko 2. iOS 앱 추가하기 iOS를 눌러 앱을 추가합니다 그러면 앱 등록 화면이 나오는데 이때 Apple 번들 ID를 입력해야 함 요건 어느 것이냐면 오른쪽 엑스코드 창에서!! Signing & Capabilities 안에 있는 Bundle Identifier 입니다 나머지 앱 닉네임, App Store ID는 선택사항이니 패스할게요 그러면 2번 단계 구성 파일 다운로드가 나오고, GoogleService-Info.plist 다운로드 받아서 Xcode 프로젝트 안에 추가해 주세요 저는 위 사진처럼 Plists라는 폴더를 따로 만들어 여기에 Info.plist와 함께 넣어 두..

    [RxSwift] ARC, 강한 참조 strong, 약한 참조 weak, 강한 참조 순환 문제

    Struct vs Class Struct 타입과 Class 타입을 비교할 때 가장 많이 하는 말 → Struct는 값 타입, Class는 참조 타입! 값 타입: 전달할 때마다 값을 복사해서 전달 참조 타입: 하나의 인스턴스가 참조를 통해 여러 곳에서 접근 인스턴스가 적절한 시점에 메모리에서 해제되지 않으면 메모리 자원을 낭비하게 됨. → 스위프트에서 메모리 사용을 관리하기 위해 ARC를 사용! ARC의 작동 규칙을 모르고 사용하면 인스턴스가 메모리에서 영원히 해제되지 않을 가능성이 있기 때문에... ARC에 대해 알아야 한다. ARC * 자동 참조 카운팅, Automatic Reference Counting => 자동으로 메모리를 관리해 주는 방식 * 더 이상 필요하지 않은 클래스의 인스턴스를 메모리에서..

    [RxSwift] Subject, .scan, RxCocoa, .bind 개념

    곰튀김 님의 RxSwift 4시간에 끝내기 (종합편) 영상을 보고 작성한 글입니다 ^~^ https://youtu.be/w5Qmie-GbiA 정말 생초보,, 아무것도 모르는 입장에서 강의 영상을 보고 의식의 흐름대로 작성한 글이니 비판의 눈으로 글을 읽어 주시면 감사하겠습니다~~ 오류 지적 대환영! Subject Observable 밖에서 값을 받아 와서 컨트롤할 수 있음 종류 4개(docs 참고) AsyncSubject Subcribe가 아무리 많이 들어와도 Complete 시점에 가장 마지막 데이터만 모두에게 내려 줌 BehaviorSubject 기본값 하나 가지고 시작, 누군가가 Subscribe하면 기본값을 내려 줌 중간에 새롭게 Subscirbe가 들어오면 기본값으로 가장 최근의 값을 내려 줌 ..

    [RxSwift] Observable의 생명 주기, 순환 참조와 메모리 관리, subscribeOn, observeOn

    정말 생초보,, 아무것도 모르는 입장에서 강의 영상을 보고 의식의 흐름대로 작성한 글이니 비판의 눈으로 글을 읽어 주시면 감사하겠습니다~~ 오류 지적 대환영! Observable Life-Cycle 1. Create Observable 생성 데이터가 생성되거나, 어떤 명령이 동작하지 않음 → 2. Subscribe에서 동작! 2. Subscribe 어떠한 Observable이 동작함 3. Next 데이터 전달 4. Completed 정상적으로 동작 끝 4-1. Error 비정상적으로 동작 끝 5. Disposed Dispose되면 그 Observable은 더 이상 재사용 불가 .debug() 로 Observable 상태 확인 가능 순환 참조와 메모리 관리 .subscribe(onNext: { i in s..

    [RxSwift] 이게 맞나? 싶은 RxSwift 개념 정리

    곰튀김 님의 RxSwift 4시간에 끝내기 (종합편) 영상을 보고 작성한 글입니다 ^~^ https://youtu.be/w5Qmie-GbiA 정말 생초보,, 아무것도 모르는 입장에서 강의 영상을 보고 의식의 흐름대로 작성한 글이니 비판의 눈으로 글을 읽어 주시면 감사하겠습니다~~ 오류 지적 대환영! [1교시] 개념잡기 - RxSwift를 사용한 비동기 프로그래밍 ✈️ Rx의 목적 비동기적으로 만들어지는 데이터(언제 만들어질지 모름)를 completion으로 전달하는 게 아니라 리턴 값으로 전달하여 좀 더 간결하게 사용하도록 만들어진 유틸리티 시간이 걸리는 작업 도중 취소 시 유용 동기/비동기 처리 쉽고 간단하게 create, subscribe, disposable // MARK: RxSwift 원형 사용..

    [Swift] 타입캐스팅, 다운캐스팅, is, as란?

    Swift의 타입캐스팅에 대해 알아보아요. 😎 먼저 클래스의 상속 개념부터 이해하고 있어야 하는데...... 이렇게 Coffee, Latte, Americano라는 클래스가 있습니다. 여기서 우리는 라떼와 아메리카노를 묶어서 커피라고 부르기도 하죠!??!? 커피라는 개념을 포함하고 있는 라떼는, 여기에서는 커피를 상속받아 라떼가 탄생하게 됩니다! 마찬가지로 커피라는 개념을 포함하고 있는 아메리카노도 생성! 그러면 커피는 부모 Class, 라떼와 아메리카노는 자식 Class가 됨니다. '커피'는 '샷'이라는 항목을 갖고 있고, 이를 상속받은 자식들인 라떼와 아메리카노도 '샷'이라는 항목을 가지고 있슴니다~~ 초간단 상속 끗! class Coffee { let shot: Int init(shot: Int) ..

    [Swift] 날짜를 문자로! Date to String

    func dateToString(_ today: Date) -> String{ let year = Calendar.current.component(.year, from: today) let month = Calendar.current.component(.month, from: today) let day = Calendar.current.component(.day, from: today) let weekdayInt = Calendar.current.component(.weekday, from: today) var weekday: String = "" switch weekdayInt { case 1: weekday = "SUN" case 2: weekday = "MON" case 3: weekday = "T..

    [Swift] 특정 날짜/시간 DateComponents to Date

    Calendar.current.date(from: DateComponents(year:2021, month: 7, day: 1)) * DateComponents는 파라미터가 모두 옵셔널이라 원하는 파라미터만 넣어서 사용 가능!

    [네트워킹] iOS Swift Alamofire 요청/응답하기(form-data형식)

    우리 서버에 json 형식으로 폰번호 넘겼더니 자꾸 변수 부족 에러 코드 뜸 -> 서버팀에 물어봄 -> 서버에 데이터 보낼 때 json 말고 form-data 형식으로 보내 달라고 함 -> 그런데 Alamofire에 form-data 형식으로 업로드할 수 있는 메소드가 있었다!!!! 평소 하던 것처럼(line 8에 주석 처리한 부분) request를 보내는 메소드가 아니라, 서버에 업로드하는 개념인 듯. 아무튼 multipartFormData 활용해서 휴대폰 번호 넣었더니 제대로 요청이 전송됐다. 🥺 //MARK: SMS request // API 호출 let paramForSMS:Parameters = ["userphonenum": phoneField.text] let url = "여기에 url 주소 ..

    [UIKit] 간단한 toast message, 확인 버튼만 있는 alert 예제

    extension UIViewController { func alert(_ message: String, completion: (()->Void)? = nil) { DispatchQueue.main.async { let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "확인", style: .cancel) { (_) in completion?() } alert.addAction(okAction) self.present(alert, animated: false) } } } 사용할 때에는 아무데서나 self.alert("알림메시지!!!") 이렇게 사용..