목록전체 글 (39)
clyne의 개발 기록

안녕하세요~ IOS 개발자 CNOO입니다. 오늘은 문자열을 자르는 것을 해보려고 해요. 안드로이드 개발해보신 분들은 아시겠지만, Kotlin이라는 언어에는 subString subStringAfter subStringAfterLast subStringBefore subStringAfterLast 이러한 메서드들로 문자열을 자르고 편집하는데요, Swift에는 따로 이러한 함수를 제공하지 않습니다. Swift에서 제공하는 prefix, suffix, index 등의 함수들로 위에 있는 것과 같이 코틀린처럼 문자열 자르는 함수를 확장해보도록 하겠습니다. prefix, suffix, index등의 swift언어의 문자열 관련 함수들은 구글링 해보시면 많은 자료가 나오니, 상세한 사용법은 생략하도록 하겠습니다. ..

안녕하세요. iOS 개발자 CNOO입니다! 오늘은 iOS 중, UIView의 특정 모서리에 코너를 주는 방법에 대해서 알아보도록 하겠습니다. 일반적으로 모든 모서리에 코너를 주는 방법은 아주 쉽습니다. (구글링하면 쏟아집니다..) self.view.layer.cornerRadius = 8 이러한 코드 한줄이면 OK이죠 그런데 우리가 하고싶은 것은, 네 모서리에 다르게 값을 주거나, 특정 모서리에만 코너링을 주는 것이죠.!! 보통은 디자이너분께서 에셋을 잘 그려서 보내주시기도 하지만, 개발자가 직접 그려야하는 경우도 무지 많답니다! 자! 그럼 결과물 먼저 보도록 하겠습니다. 결과물 이런 모양의 뷰를 그리고싶다! 하면 계속해서 포스팅을 읽어주세요 ㅎㅎ 1. 3개의 뷰 객체 생성 먼저, UIView를 3개 생..

안녕하세요~! iOS개발자 CNOO 입니다. 오늘은~~~ 제가 자주 활용하는 CompatMap에 대해서 알아보겠습니다. nil을 처리하는 방법은 다양합니다. 예제 1. let array = [1, 2, nil, 4, 5, nil] let nonNilArray1 = array.filter{ $0 != nil} let nonNilArray2 = array.flatMap{ $0 } let nonNilArray3 = array.compactMap{ $0 } print(array) // [Optional(1), Optional(2), nil, Optional(4), Optional(5), nil] print(nonNilArray1) // [Optional(1), Optional(2), Optional(4), Op..

안녕하세요! iOS 개발자 CNOO 입니다!! 오늘은 기기 자체 기능인 Torch에 대해서 알아보도록 하곘습니다. Torch랑 Flash는 어떻게 다를까요?? 애플 공식문서를 보면 그 차이가 명확하고 자세하게 서술되어있습니다. (물론 영어로요... ㅎㅎ) https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html 하지만, 갈길이 바쁜 저희 개발자들에게는 미리 읽어본 사람이 요약해주는 것이 인지상정 아니겠습니까? 1. Torch (손전등) 요약하자면 Torch는 우측 이미지와 같이, 손전등이 켜져있음이 유지되어있는 상태를 의미합니다. 저렇게 손..

안녕하세요!! 주말동안 잘 쉬셨나요? iOS개발자 CNOO 입니다!! 오늘은, Apple에서 제공하는 AVFoundation 모듈을 활용하여, Camera기능을 구현해보도록 하겠습니다. 오늘 구현해볼 것은 1. 카메라 프리뷰 2. 촬영버튼을 통한 촬영 크게 이렇게 두 가지 입니다. 렛터디에서 출석 사진을 등록하는 화면을 구현한 코드를 예시로 소개할 것입니다. 먼저, 구현된 화면을 보실게요~ 렛터디에서 출석사진 등록을 진행하는 화면입니다. 1. 카메라 접근 권한 요청 카메라 기능을 활용하기 위해서는, 사용자에게 카메라 접근 권한을 획득해야겠죠? 카메라 접근 권한과 관련해서는 제가 이전에 포스팅한 글을 참고해주세요! 2021.04.26 - [iOS/Swift] - [Swift] 카메라/사진 권한 요청 [Sw..

안녕하세요. iOS 개발자 CNOO 입니다. 오늘은 Swift에서 카메라 접근, 사진 접근 권한을 얻는 방법에 대해서 알아보려고 합니다. 1. 사진 접근 권한 기기에 있는 사진을 가지고 온다거나 할 때는 사진 권한이 필요합니다. 최종적으로는 presentImagePicker 라는 함수를 호출하는것이 목표입니다. 관련 코드는 다음과 같습니다. private func selectImage() { if #available(iOS 14, *) { PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in if status == .authorized || status == .limited { self.presentImagePicker() } else { s..

안녕하세요. iOS개발자 CNOO입니다. 오늘은!!!! UIButton이 아닌, UIView에 클릭 이벤트를 추가하는 방법에 대해서 알아보고자 합니다! UIView를 상속받는 모든 View에 해당하는 방법이니까, 잘 보고 편하신 방법으로 구현하시면 되겠습니다. (사실 이 포스팅의 핵심은 RxGesture......예요.. 이거 엄청 좋습니다. RxSwift 와 ㄹㅇ찰떡궁합.) 샘플 화면 먼저 간단히 어떤 화면을 구현했는지 보겠습니다. 저는 간단히 파란 네모와 빨간 네모를 만들어서 클릭하는 이벤트를 적용해보았습니다. 클릭하면 아래와 같이 로그가 찍히는 예제입니다. 세가지 방법에 대한 설명을 모두 쭉 하고, 맨 아래쪽에 코르를 보여드리도록 하겠습니다. 방법1. Add UITapGestureRecognizer..

안녕하세요 iOS 개발자 CNOO 입니다. 오늘은 RxSwift의 .drive와 .subscribe의 차이점에 대해 알아보도록 하겠습니다~ 먼저 Drive의 공식 문서를 보시면 1. 오류를 내뱉지 않는다. 2. MainScheeduler에서 동작한다 (메인스레드 동작 보장) 3. 바인딩 되어있는 경우, 1회 동작을 보장한다. 정도가 되겠네요. 결론부터 말씀드리자면, Drive는 Main Thread에서 동작하는 것을 보장하기 때문에, UI 와 관련된 처리는 모두 Drive 로 처리해주시면 됩니다. 물론 subscribe를 사용하실 때도 Main Thread에서 동작하도록 슈거를 추가해주면 되는데, 해당 방법은 아래 예제를 통해 보여드리도록 하겠습니다. 심플하게 UITextField를 하나 화면에 추가해서..

안녕하세요 iOS 개발자 CNOO입니다! 오늘은 제가 자주 사용하는 MVVM (RxSwift를 활용한) 아키텍처를 심플하게 보여드리고자 합니다. 구현하고자 하는 것은 간단히 "추가"버튼을 눌렀을 때, 숫자가 1씩 늘어나고 "초기화"버튼을 눌렀을 때, 숫자가 0이 되는 예제를 보여드리고자 합니다. 구성은 ViewController ViewModel 로 이루어져 있으며, ViewController가 View의 역할을 할 것입니다. Model - View - ViewModel 자! MVVM아키텍쳐의 핵심은 바로, View가 하는 것을 ViewModel이 모르게 하라!! ViewModel은 View와의 바인딩 만으로 View가 뭘 하든 알 수 없게 해야하고. View는 ViewModel에서 보내주는 데이터를 뿌..
안녕하세요! iOS 개발자 CNOO입니다. 오늘은, 렛터디 서비스에 MVVM 디자인 패턴을 적용하던 도중, MVC에서는 "당연히" 쓰던 UIViewController내 함수들을 ViewModel에서는 어떻게 써야할지 몰라서 삽질했던 경험을 공유드리고자 포스팅 하게 되었습니다. iOS개발자라면 다들 UIAlertController를 띄우거나, 다른 ViewController를 띄워주기 위해 pushViewController 또는 present 메서드를 이용했었죠! 그런데 말입니다.... 이걸 ViewModel에서는 어떻게 띄워야 할지 모르겠단 말입니다.... 그래서 저는 두 가지 방법으로 해결해보았습니다. (정답은 없습니다, 그러나, 조금 더 나은 방법이 있다면 댓글 남겨주시고, 아시는 내용 있으시면 공유..