목록iOS (28)
clyne의 개발 기록
안녕하세요 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에서는 어떻게 띄워야 할지 모르겠단 말입니다.... 그래서 저는 두 가지 방법으로 해결해보았습니다. (정답은 없습니다, 그러나, 조금 더 나은 방법이 있다면 댓글 남겨주시고, 아시는 내용 있으시면 공유..
안녕하세요! iOS 개발자 CNOO입니다. 오늘은 iOS WebKit에 대해 알아볼건데요, 애플에서 기본으로 제공하는 WebKit을 import하고 시작해봅시다. 먼저, 스토리보드나, Xib파일에서 WebKit을 검색해줍니다! 네. WebView는 Deprecated되었다 하니, WebKit View를 사용해봅시다. 이 것을 ViewController에 연결한 뒤에, (스토리보드) 위와 같이 로드해주면 되는데요, 제가 두시간동안 헤맸던 부분은 바로 Javascript interface부분이었습니다. iOS 웹킷은, 안드로이드의 웹뷰와는 달리 WKWebViewConfiguration의 userContentController 라는 변수에다가 WKUserContentController객체를 만들어서 넣어주어야..
안녕하세요 iOS 개발자 CNOO입니다. 오늘은 merge를 활용하여 버튼 두개의 이벤트를 처리하는 코드를 작성했던 경험을 공유하고자 포스팅하게 되었습니다. 1. 분리된 코드 (리팩토링 전) 아래 코드와 같이, 뭔가 정말 비슷하게 동작하는데.... 하나의 코드로 리팩토링 할 수는 없을까 고민하고 삽질해보았습니다. 먼저, 분리된 코드 먼저 보시죠 어차피 같은 이메일 보내기 동작인데, 두 번이나 쓸 필요는 없겠죠?? 2. merge된 코드 (리팩토링 후) 자! 여기서 우리는 merge라는 operator를 활용하여, 하나의 코드로 작성해보겠습니다. 아! 그 전에, merge가 어떻게 동작하는지, 간단히 마블 다이어그램부터 보고 가실게요 merge operator의 마블다이어그램 출처: .ReactiveX 홈..
안녕하세요~iOS 개발자 CNOO 입니다. 오늘은 RxSwift를 이용하여 UITextField, UITextView의 글자수를 제한하는 방법을 알아봅시다~ 1. Delegate 방식기존에 Delegate 방식으로 이벤트를 받아 처리하는 것은 아래와 같이 했었죠!닉네임 입력창의 글자 수 제한을 8자로 제한하는 코드입니다.이 방법은 많이 익숙하실 것이고, 검색하면 많이 나오는 코드죠!( 저도 어딘가에서 복사 붙여넣기 해서 만든 코드인거같네요...) 2. RxSwift 를 이용한 처리델리겟 방식도 처음엔 엄청 편하고 그랬는데,RxSwift 공부하면서 코드가 더 깔끔해져서 이제는 Rx코드만 쓰네요 ㅋㅋ아래는 인증번호 입력창을 6자로 제한하는 코드입니다. 이 코드는 어디서 배껴온건 아니고 제가 직접 짰어요!Rx..
startWith!!! Observable 시퀀스 앞에 원하는 값을 programmically 추가해주는 유용한 기능을 한다!! 구성하고 있는 화면 중에 아래와 같이 스터디장이 일일 공부시간을 수정하는 화면이 있는데, 코드는 다음과 같이 짰다. intPicker는 시간을 선택하는 UIPickerView고, minPicker는 분을 선택하는 UIPickerView이다 intArr에는 시간이, minArr에는 분이 10 ~ 50까지 들어있다!! 여기서 시간과 분을 모두 바꿔주어야만 combineLatest스트림에 EventControl이 전달되기 때문에 문제를 겪고 있었다. 이렇게, programmically 선택을 해주어도, 스트림에 전달되지는 않았다 ㅠ_ㅠ 그래서 열심히 삽질한 결과!!! 구세주 star..
모든 라이브러리가 그렇듯, 우리는 RxSwift를 공부하면서 가장 먼저, 그리고 가장 최우선적으로 참고해야하는 곳이 바로 공식 사이트 입니다. 그러나!!!!!! 이미 RxSwift를 공부하시기 시작한 분은 다른 포스팅에서 숱하게 보셨을테니... 저는 RxSwift를 공부하면서 스스로 깨달았던 부분들에 대해서 포스팅해보려 합니다. (그래도 공식사이트 링크 정도는 남겨두도록 하겠습니다 ㅎㅎ 저도 자주 들어가보곤 하니까 링크 하나 있으면 편하겠네요~ http://reactivex.io/ 기본적으로 공식사이트에는 아래와같이 An API for asynchronous programming with observable streams 라고 적혀있는데요.. 이 문장의 의미를 최대한 심플하게 이해하실 수 있도록 예제를 ..
안녕하세요 iOS 개발자 CNOO입니다. 3년동안 iOS개발을 하면서, 매번 MVC 패턴으로 설계되어있는 소스만 유지보수 하다보니, 현업에서 근무하는 동안 RxSwift의 필요성을 딱히 느끼지 못했던 것 같습니다. 풀타임으로 근무하고있는 현 회사에서는 마음대로 구조를 바꾸거나, 보안취약점 등의 이유로 제가 만든 작은 모듈 하나도 마음대로 붙이지 못해서 그런걸수도 있겠네요.. (금융업계다보니 개발하기에 굉장히 폐쇄적인 환경입니다 ㅠ_ㅠ) 개발자는 계속 공부하고 발전해나가야한다는 생각이 있어, 친한 동생이 창업한 작은 스타트업의 iOS 개발도 함께 진행중입니다. (렛터디 라는 소규모 스터디 플랫폼입니다. ㅎㅎ 관련 소개는 다른 카테고리를 참조해주세요~) 공식 오픈을 앞두고있는 신생 스타트업이라, 최신 라이브..