일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Observable
- swift documentation
- swiftUI
- 클린 코드
- 애니메이션
- clean architecture
- combine
- SWIFT
- 리펙터링
- Human interface guide
- ios
- rxswift
- Clean Code
- 스위프트
- collectionview
- UICollectionView
- Refactoring
- 리펙토링
- ribs
- Xcode
- tableView
- uitableview
- Protocol
- uiscrollview
- map
- MVVM
- 리팩토링
- RxCocoa
- HIG
- UITextView
- Today
- Total
목록ios (1096)
김종권의 iOS 앱 개발 알아가기

메서드 올리기 서브클래스들이 여러개 있을 때 이 클래스에서 동일한 내용을 정의하는 메서드가 있을 때 이 메서드를 수퍼클래스에 이동시켜서 중복을 제거할 수 있음 중복의 위험) 동일한 로직을 사용하고 있는 중복 코드에서, 한쪽의 변경이 다른 쪽에는 반영이 안되는 이슈가 발생할 수 있는 가능성 존재 예시) 메서드 올리기 Member라는 수퍼 클래스가 있고 서브 클래스로 Developer, FireFighter가 존재 얼핏보면 메서드 이름이 달라서 다른 메서드인것 같지만 같은 역할을 하는 것이므로 getFullname(), getName()을 하나로하여 수퍼 클래스로 이동이 필요 class Member { var age: Int var name: String init(age: Int, name: String) ..

PlaceholderTextView 구현 아이디어 UITextView에는 기본적으로 가지고 있는 placeholder 속성이 없기 때문에 커스텀이 필요 잘못 구현하는 케이스 1) UITextView하나만 가지고 텍스트 입력이 시작될 때 textColor와 text를 순간적으로 변경 -> 포커스 위치가 글씨 맨 오른쪽으로 가거나, 포커스 되는 순간 placeholder 값을 지워함 (placeholder는 한 글자 이상 입력될때 없어지도록 구현 불가( 2) UILabel을 두어 UITextView위에 얹져서 구현 -> 깜빡거리는 포커스보다 UILabel이 위에 있기 때문에 깜빡거리는 포커스가 안보이는 현상 발생 UITextView안에 placeholder 전용으로 사용하는 UITextView를 별도로 두어..
오류 코드를 예외로 바꾸기 하드코딩된 상수인 매직 넘버를 사용하여 오류처리를 하는 경우가 있는데, 매직 넘버를 사용하면 의미나 목적을 이해할 수 없으므로 매직 넘버를 사용하면 안좋고 예외로 바꾸어야함 ex) 매직 넘버 예시 // 매직 넘버를 사용한 예시 func calculateAreaOfCircle(radius: Double) -> Double { return 3.14159 * radius * radius } // 매직 넘버를 상수로 대체 let pi = 3.14159 func calculateAreaOfCircle(radius: Double) -> Double { return pi * radius * radius } ex) 예외 처리를 하지 않은 오류 enum FetchItemType: CaseIte..

수정된 값 반환하기 메소드 내부에서 값을 변경하는 것보다는, 메소드에서 값을 계산하여 나온 반환 값을 사용하는 편이 좋은 코드 데이터가 어떻게 수정되는지를 추적하는 일은 코드에서 이해하기 어려운 요소이므로, 함수 내부에서 데이터 값을 수정하는 예측하기 힘든 것들을 리펙토링해야함 즉 예측하기 쉬운 프로그래밍은 함수를 호출하는 쪽에서 어떤 값이 변경되는지 쉽게 파악이 가능해야하며 이는 함수 내부에서 전역 변수의 값을 바꾸는 것을 지양해야함 리펙토링 예시 main() 메소드가 호출될때, 이 안에서 calculateAsset()이 호출되는데 함수 내부에서 전역 변수인 total을 바꾸게 되어 사용하는 쪽 main 안에만 보면 total 값이 바뀌는지 예측하기가 힘듦 struct Asset { var countO..

1. 키보드 처리 - 키보드가 올라갈 때 뷰를 올리는 UI 2. 키보드 처리 - 키보드가 올라갈 때 스크롤 뷰를 올리는 UI 키보드가 올라갈 때 스크롤 뷰를 올리는 UI 구현 아이디어 keyboard를 감싸는 투명 UIView, keyboard 바로 위쪽을 감싸는 투명 UIView를 준비 투명 UIView는 hitTest를 사용하여 pass through하게 구현 (PassThroughView 구현은 이전 포스팅 글 참고) 키보드 바로 위쪽을 감싸는 투명 UIView위에 UIScrollView + UIStackView를 삽입 UIStackView에 UITextView, UIButton을 넣으면 버튼이 화면 하단으로 가지 않고 중간에 있을것이므로, UITextView와 UIButton 중간 여백을 넣어주..

1. 키보드 처리 - 키보드가 올라갈 때 뷰를 올리는 UI 2. 키보드 처리 - 키보드가 올라갈 때 스크롤 뷰를 올리는 UI 키보드가 올라갈 때 뷰를 올리는 UI 구현 아이디어 keyboard를 감싸는 투명 UIView, keyboard 바로 위쪽을 감싸는 투명 UIView를 준비 투명 UIView는 hitTest를 사용하여 pass through하게 구현 (PassThroughView 구현은 이전 포스팅 글 참고) 키보드 바로 위쪽을 감싸는 투명 UIView위에 UITextView, UIButton을 두어서 구현 구현 사용한 라이브러리 pod 'SnapKit' pod 'Then' pod 'RxSwift' pod 'RxCocoa' pod 'RxGesture' 상속보다는 유지보수에 용이한 프로토콜 형태인..

cf) 파생과 질의 구분하기 파생(Derived) 변수: 사용하는쪽에서 관심 밖의 변수들에도 영향을 주는 것 질의(Query) 함수: 사용하는쪽에서 관심 대상인 변수에만 영향을 주는 것 (단순 get, set) 매개변수를 질의 함수로 바꾸기 함수의 동작에 변화를 주는 요인은 함수의 매개변수 즉, 함수의 동작에 변화를 주는 요인을 구성할 때 짧으면 짧을수록 이해하기가 쉬운 형태의 함수 함수가 스스로 쉽게 결정할 수 있는 값을 매개변수로 건네는 것도 일종의 중복이므로, 이 결정은 함수안에서 결정하게하여 더욱 간결한 함수형태로 변경이 필요 ex) 함수를 사용하는 쪽에서 person, person.name을 넘기는데, 중복코드가 발생 let person = Person(age: 1, name: "jake") l..

Apple Silicon 맥북에서 Carthage로 RIBs를 사용할 때 에러 Universal 아키텍쳐 프레임워크를 빌드하려고 할 때, simulator와 타겟 디바이스의 지원하는 아키텍쳐가 동일한 경우 에러가 발생 인텔 멕북이 아닌 Applie Silicon Mac에서는 arm64을 사용하고 있기 때문에, 이를 따라가는 simulator도 arm64인 상태 디바이스 지원하는 아키텍쳐가 arm64인 상태 ex) Carthage 에러 발생 RIBs 깃허브에 나와있는 버전으로 지정한 후 카르타고 파일 준비 (Cartfile) github "uber/RIBs" ~> 0.9 아래 명령어로 Carthage를 통해 RIBs 설치 carthage update (에러 발생) 에러가 발생하는 이유 RxSwift에서는..