iOS
-
[RxSwift] Error Handling [2]iOS/RxSwift 2022. 1. 27. 01:40
이전 글에서 Error Handling에 대해서 탐구하는 과정을 기록했다. 그 이후 여러가지 Demo나 Article을 읽으며 어떤 방식이 더 좋은 선택일지 고민했다. 수 개의 프로젝트를 살펴보았을 때, 대게 몇가지 패턴으로 에러를 처리하고 있었다. 그 중, 나는 materialize를 활용한 방식에 주목했다. 일단 이 방식이 입증된 방식인지를 알기 위해서 해당 키워드에 대한 수많은 검색을 통해서 저명한 개발자들의 활용사례를 발견할 수 있었다. 더보기 https://github.com/ReactiveX/RxSwift/issues/729#issuecomment-621606909 What is the correct way to handle errors? · Issue #729 · ReactiveX/RxSwi..
-
[RxSwift] Error Handling [1]iOS/RxSwift 2022. 1. 25. 20:51
아래 코드는 Firebase/Auth의 전화번호 로그인과 idtoken발급에 대한 예제코드에 RxSwift를 적용한 것이다. 네트워크 레이어 분리를 위해서 viewModel과 다른 클래스에 메서드를 작성해 주었다. 분리하기 이전에는 네트워크 통신시 에러가 발생했을 때, errorToast관련 Subject에 accept만 해주고 onNext를 방출할 수 있었다. 하지만 분리한 뒤에는, 에러가 발생했을 때 viewModel에게 명확하게 에러가 발생했다는 것을 전달해 주기 위해서 Single(.failure)을 사용해야겠다고 판단했다. 해당 상황을 예제코드로 옮기면 아래와 같다. // // ViewController.swift // Practice // // Created by SEUNGMIN OH on 2..
-
[UITextField] 일정 포멧에 맞춰서 / 마스크 입혀주기iOS/UIKit 2022. 1. 22. 22:16
뭐라고 설명하기 어려운것 같아서 영상으로 설명을 대신한다. 아래 예시는 전화번호 포멧에 맞춰서 표시형식을 맞춰준 것이다. 간단하게 설명하자면, 텍스트필드 입력값을 받아서 포멧에 맞게 수정한 뒤에 다시 텍스트필드값을 바꿔주는 로직이다. 구현은 아래와 같다. extension String { var decimalFilteredString: String { return String(unicodeScalars.filter(CharacterSet.decimalDigits.contains)) } func formated(by patternString: String) -> String { let digit: Character = "#" let pattern: [Character] = Array(patternStrin..
-
[SwiftGen] Assets을 쉽고 안정적으로 사용하자!iOS 2022. 1. 20. 01:11
소개 SwiftGen이란 쉽게 말하자면 Assets을 코드로 바꿔주는 기능을 해준다고 생각하면 된다. 변환을 거친 후에는 아래와 같이 쉽게 사용할 수 있게 해준다. 이걸 왜 사용하느냐? 1. 리소스가 매우 많을 때, 자동으로 코드로 변환해주기 때문에 생산성이 향상된다. 2. 자칫 잘못 입력할 수 있는 String으로 된 파일명을 자동으로 변환해주기 때문에 안정성이 향상된다. 사용 설치 // Pod -> Podfile에서 pod 'SwiftGen', '~> 6.0' // Homebrew -> Terminal에서 $ brew update $ brew install swiftgen적용 프로젝트 최상단에 swiftgen.yml파일 생성 // swiftgen.yml xcassets: ..
-
[미세먼지 TIL] 퍼센트값으로 된 line height의 적용iOS/UIKit 2022. 1. 18. 22:12
처음으로 디자이너분들이 작업하신 UI 명세(?)를 Figma로 받아봤다. 그런데 line height에 퍼센트로 표시되어있었다. 그렇지만 Swift에서는 lineHeight의 자료형이 CGFloat이기 때문에 명세에 있는 line height을 어떻게 적용해야 할지 모르겠다. 검색을 통해서는 해결하지 못했고, Figma를 살펴보던 중 값을 계산해보면서 적용방법을 알아낼 수 있었다. lineHeight(px) = fontSize(px) * lineHeight(percent) 즉, 위의 첫번째 예시처럼 font의 fontsize = 20px이고 lineHeight(px) = 160%라면 lineHeight(px) = 32px로 계산할 수 있다.
-
UIButton.Configuration으로 리펙토링 아이디어iOS/UIKit 2022. 1. 14. 00:31
UIButton.Configuration에는 애플에서 사전에 만들어놓은 여러가지 스타일들이 있다. button.configuration = UIButton.Configuration.plain()이런 형태로 쉽게 스타일을 적용할 수 있다. 이걸 토대로 custom style도 쉽게 만들어 리펙토링하면 괜찮을 것 같다. extension UIButton.Configuration { static func style() -> UIButton.Configuration { var configuration = UIButton.Configuration.bordered() configuration.baseForegroundColor = .white configuration.imagePlacement = .bottom c..
-
[UIKit] TableViewCell 내부의 button이 작동하지 않을 때iOS/UIKit 2022. 1. 13. 04:19
Button을 갖는 CustomCell을 만들었을 때, 계속해서 Button의 클릭이벤트가 발생하지 않는 오류를 만났다. 기능적인 오류가 아닌 View 계층적인 문제였다. 아래를 보면 빨간색 박스에 포함된 객체들이 버튼이다. 초록색 박스를 보면 버튼 위에 뷰가 하나씩 더 있는것을 볼 수 있다. 초록색 박스의 정체는 TableViewCell.contentView이다. Cell.addSubview()를 하게되면, Cell과 ContentView사이에 객체가 들어가기 때문에 상호작용이 불가능하다. 따라서 ContentView위에 객체를 추가해주어야 상호작용이 가능하다. TableViewCell.contentView.addSubView()로 contentView위에 객체를 추가해주니 버튼도 잘 눌린다.
-
[TIL] 참조와 캡쳐iOS/Swift 2022. 1. 11. 18:21
일단 weak, unowned 키워드에 대해 배우고 캡쳐까지 확장했다. 참조 카운트, ARC에 대한 키워드인데, 이것을 이해하려면 참조 카운트에 대한 이해가 필요하다. 매우 장황한 주제지만, 하나씩 차근차근 공부해보며 작성해봐야겠다. 참조카운트(Reference Count) 간단하게 객체가 참조되고있는 개수를 표현한 용어이다. 객체를 생성하기만 해도 참조가 생기기 때문에 기본적으로 RC는 1이라고 볼 수 있다. RC가 0이라는 것은 더이상 아무도 그 객체를 필요로하지 않는다는 뜻이기 때문에 메모리 해제를 해 주어야 한다. 이런 상황에서 메모리 해제를 OBJ-C에서는 직접 해줬다고 하는데,, C++을 사용하는 느낌이였을 것 같다. 직접 메모리 관리를 해주는 것을 MRC(Manual Reference Cou..