일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- combine
- UITextView
- 스위프트
- rxswift
- map
- collectionview
- 리팩토링
- 리펙터링
- Protocol
- RxCocoa
- HIG
- 애니메이션
- SWIFT
- Refactoring
- 클린 코드
- MVVM
- uitableview
- clean architecture
- UICollectionView
- uiscrollview
- Clean Code
- tableView
- ribs
- Human interface guide
- 리펙토링
- Xcode
- swift documentation
- ios
- swiftUI
- Observable
- Today
- Total
목록ios (1095)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/da7UCf/btq7VYCh7tX/2cmChEBapRvFZgC2K3QOt0/img.png)
예약어란? 특정 기능을 미리 예약되어 있는 단어 switch문에서 case에 class, var, let을 그냥 사용하면 예약어로 인식하기 때문에 컴파일 에러 발생 Backtic Backtic 기호인 ``를 사용하여 예약어를 사용 enum Sample { case `class` case `var` case `let` }
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/be6So7/btq7XsuE2rd/bkFmmZcEWN0EHwjQoyAU31/img.png)
Steppers 증분 값을 늘리거나 줄이는데 사용되는 두 segmented control 기본적으로 setpper의 한 segment는 더하기 기호를 표시, 다른 segment는 빼기 기호를 표시 기호는 다른 이미지로 교체 가능 Stepper의 영향을 받는 값을 분명하게 표출 stepper 자체는 값을 표시하지 않으므로 사용자가 stepper를 사용할 때 변경되는 값을 알고 있어야 하는점 존재 큰 값이 변경 될 가능성이 있는 경우 stepper사용을 지양 인쇄 화면에서의 stepper를 이용한 복사 매수를 설정하는 부분인, 사용자들이 설정을 거의 변경하지 않는 경우에는 좋지만 stepper를 사용하여 페이지를 선택하는 것은 많은 interaction이 필요하므로 비효율적 * 참고 https://devel..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bgaLNv/btq7RywqZMf/vZYAQtYuYZEglFGg0IV7p1/img.png)
Slider 엄지 손가락이라고하는 컨트롤이 있는 가로 트랙 손가락으로 슬라이드하여 미디어 재생 중 화면 밝기와 같은 최소값과 최대값 사이 설정 슬라이더의 값이 변경될 경우 최소값에서 부터 엄지 손가락 사이의 트랙 부분이 색상으로 채워지는 형태 UISlider 사용 슬라이더 트랙 양쪽에있는 이미지를 한눈에 비교가 되는 이미지를 삽입 ex) 이미지 크기를 조정하는 Slider: 왼쪽에는 작은 이미지 아이콘, 오른쪽에는 큰 이미지 아이콘 사용 Slider를 사용하여 오디오 볼륨을 조정하는 것을 지양 볼륨 지정은 MPVolumeView를 사용: 볼륨 지정 Slider와 오디오 출력 장치를 변경하기 위한 컨트롤이 내장되어 있는 View * 참고 https://developer.apple.com/design/hum..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/KONpg/btq7QwEluUO/VC6bxp0f2L7FlYVtiMt9kk/img.png)
LSP 부모 클래스의 객체 대신에 자식 클래스의 객체로 치환해도 프로그램의 행위에 변화를 주지 않아야 한다는 원칙 자식 클래스 or 구현체를 만들 때, 상위 타입의 객체로 치환해도 문제가 없는지 파악해야 한다는 의미 인터페이스를 구현한 구현체 역시도 LSP원칙을 준수 목적: 치환 가능성을 조금이라도 위배하면, 추후 상당량의 별도 메커니즘이 필요 정사각형 - 직사각형 문제 사각형의 하위 타입으로 정사각형으로 구성하면 LSP위배 User입장에서는 Interface인 Reactangle의 성격을 생각하고 사용하지만, Square에서의 성격이 다른경우가 존재하면 오류 발생 그 오류를 해결하기 위해서는 상당량의 별도 매커니즘이 User에 필요하게 되는 악순환 발생 예시) setH, setW 호출 후 넓이 계산하는..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oow9T/btq7C3DdruZ/dJzNKGvpbtMKxxJpGLKEbK/img.png)
* Pull-Down Menu는 Context Menu와 유사하므로 주의: https://ios-development.tistory.com/540?category=980570 [iOS - HIG] 45. Context Menus Context Menus 상황에 맞는 메뉴를 제공하여 인터페이스를 복잡하게하지 않고 화면 항목과 관련된 추가 기능에 엑세스 할 수 있도록 표출 Peek and Pop: long touch 시 실행 사용 가이드: https://developer.appl.. ios-development.tistory.com Pull-Down Menus iOS14+ 현재 컨텍스트에서 유용한 작업 목록을 나열하는 메뉴 메뉴를 표시하는 버튼 근처에 메뉴가 열리므로 사용자들이 수행중인 작업 간의 관계를 즉..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c9Wyps/btq7CFClSWK/ozRK37GHKouAi6etaLYR11/img.png)
Progress Indicator 앱이 콘텐츠를 로드하거나 긴 데이터 처리 작업을 수행할 때까지 사용자가 정적 화면을 보는게 아닌, indicator를 보는 형태 Activity Indicators Refresh Content Controls과 구분 회전하는 Activity Indicator 사용자가 얼마나 오래걸릴지 예측할 수 있게끔 Activity Indicator보다는 Progress bar를 지향 사용자들은 정지된 화면을 보고 프로세스가 중단되었다고 느끼므로, 항상 Activity Indicator를 움직이도록 설정 작업이 완료 될때까지 기다리는 동안 사용자에게 유용한 정보를 제공 Progress Bars 왼쪽에서 오른쪽으로 채워지는 트랙 형태 앱이 바쁜 것처럼 보이도록 부정확한 진행 정보를 표출..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Rc7Db/btq7C3JyQTX/NptmbuQeY5rRTibS9NDwr1/img.png)
OCP 개념: 기능이 추가될때 소프트웨어 개체는 확장을 하는 방향이며, 변경은 최소화 더욱 정확한 개념: 의존관계를 잘 설정하여 특정 항목이 변경되어도 중요한 interactor같은 컴포넌트는 변경하지 않아도 되는 형태 목적: 시스템을 확장하기 쉬운 동시에 변경으로 인해 시스템이 너무 많은 영향을 받지 않도록 하는 것 OCP 아이디어 아이디어: A, B 관계에서 A컴포넌트에서 변경 발생 -> B컴포넌트는 수정하지 않는 방법? B컴포넌트가 A컴포넌트에 의존하고 있지 않으면 해결 의존성을 관리하려면 Interface를 통해 의존 관계를 변경 예시 View에서 변경 -> Presenter 보호 Presenter에서 변경이 발생 -> Controller 보호 View, Presenter, Controller, ..
모듈 구현 시 응집도를 높이기 위한 방법 외부에서 읽기만 가능하고 변경은 내부에서만 가능한 property 설정 public private(set) 사용 -> swift에서 get메서드가 필요없는 이유 private(set) 자세한 개념 참고 class Person { public private(set) var name: String init(name: String) { self.name = name } } var jake = Person(name: "jake") print(jake.name) // jake jake.name = "wiki" // error 발생 Computed Property의 용도 getter / setter 용도의 computed property storedProperty는 언더바를..