일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- map
- Refactoring
- 리팩토링
- Observable
- UICollectionView
- ribs
- combine
- 애니메이션
- SWIFT
- MVVM
- uitableview
- Human interface guide
- rxswift
- collectionview
- 스위프트
- HIG
- RxCocoa
- Protocol
- 클린 코드
- 리펙터링
- swift documentation
- uiscrollview
- UITextView
- 리펙토링
- ios
- tableView
- Xcode
- clean architecture
- swiftUI
- Clean Code
- Today
- Total
목록SWIFT (948)
김종권의 iOS 앱 개발 알아가기
uber가 RIBs를 만든 이유 - 모듈화 MVC를 사용할 때 새로운 기능이 늘어나며 앱의 복잡성 증가 모듈이 증가할수록, 테스트 하기 점점 어려워지는 현상 4년동안 MVC패턴 사용 -> 관리하기가 힘든 scale (하나의 ViewController파일에 300줄 -> 3000줄) massive view controllers (비즈니스 로직, 데이터 변경, 데이터 검증, 네트워크 로직, 라우팅 로직) 테스트가 어려운 구조 (if-else문으로 테스트) VIPER 아키텍처 View Interactor: 비즈니스 로직포함, API나 DB로 Data르 받아서 Entity(모델) 생성 Presenter: View에서 유저 앣견을 받고, Interactor에 data를 요창하여 VIew에 그려주는것을 다시요청 E..
KVO(Key-Value Observing) 특정 키의 값의 변화를 감지하기 위한 기능 `변수`에 코드를 붙여 변수가 변경될 때마다 코드가 실행되도록 하는 방법 Property Observers(willSet, didSet)과 유사하지만 KVO는 타입 정의 밖에서 observe를 추가한다는 점의 차이가 존재 (Objective-c 런타임에 의존하기 있기 때문) 사용할 땐 NSObject를 상속받기 위해 @objc dynamic를 반드시 붙여줘야 가능 (dynamic 키워드: Objsective-c 문법의 하나로, 특정 method의 구현을 objective-런타임에서 dynamic dispatch를 활성화 Dynamic dispatch: 키 패스(KeyPath = \.) 이름을 이용해 프로퍼티의 주소를 ..
하나의 Project에 프레임워크와 pods추가 방법 구성: 메인 앱은 MyApp이고 나머지는 framework로 추가 MyApp.xcworkspace를 만들고, 하위에 MyApp.xcodeproj파일, Domain프레임워크, pods프레임워크 추가 프로젝트의 루트가 될 폴더 추가 주 프로젝트 파일이 될 ".xcworkspace"파일 생성: 아무 프로젝트 실행 -> "ctrl + cmd + N"하여 생성 (이름은 위 루트 폴더와 동일하게 할 것) 위 파일 실행: 아래처럼 비어있는 .xcworkspace파일 확인 메인 프로젝트가 될 .xcdeproj파일 생성(이름은 위에서 정한 이름과 동일하게 할 것): "shift + cmd + N" 단, 아래 2번 째 사진과 같이 Add to와 Group설정을 해야되는..
custom extension이란? 객체.rx.함수접근이 가능하게끔 표현 첫 번째 방법, Binder * Oberver only (Observable처럼 값을 받아서 처리한다는 개념이 아닌, 함수처럼 안에서 수행하라는 의미) * Main Scheduler에서 수행하는 것이 default class ViewController: UIViewController { let bag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() let obs = Observable.of(true) rx.myCustom.onNext(false) // observer라 가능 rx.myCustom.subscribe // observer라 불가능 obs.asDriver..
1. Buffering Operators 1) share(replay:), share(replay:scope:) 과거의 이벤트들을 subscriber에게 emit - replay 파라미터 : 버퍼사이즈 (얼마만큼의 element를 새로운 subscriber에게 emit할 것인지 - scope 파라미터 : subscriber의 수가 1에서 0으로 될 때 다음 동작 .whileConnected : 공유되고 있던 stream의 cache삭제 .forever : stream의 cache를 삭제하지 않음 이밖의 메소드 - replay(_:) - replayAll() - multicast(_:) - publish() 2. Time-shifting operators 이벤트 emit에 delay를 시킬 수 있는 연산자..
*Navigation Controller를 프로그래밍 방식으로 구현하기 1. 기본적인 프로그래밍 방식 - ViewController에서, 프로그래밍 스타일로 만든 ResultViewController로 데이터 넘기는 예제 1) 첫 main.storyboard세팅 (오른쪽 화면은 ViewController클래스와 연결) 2) ResultViewController 프로그래밍방식으로 생성 - 주의할점 : 프로그래밍 방식으로 구현시, 루트뷰의 색상은 black이므로 white로 수정해야함 1 2 3 4 5 6 7 8 9 10 11 12 13 // ResultViewController.swift class ResultViewController: UIViewController { var pL: String! var..
저작권 없는 무료 이미지 pixabay: pixabay.com/ko/ 저작권 없는 무료 아이콘 최적화: https://fonts.google.com/icons?selected=Material+Icons&icon.query=arrow icooon: icooon-mono.com/ 이미지 -> iOS 앱 아이콘 형식으로 변환 App Icon Resizer: makeappicon.com 앱 아이콘 이미지 설정 iOS -> AppIcon-appiconset: 해당하는 파일을 아래 사각형에다가 드래그&드랍하여 설정 앱 이름 설정 info.plist -> Bundle name의 value속성에 이름 기입
1. 네트워크에 대한 기본 지식 1) 통신을 위한 프로그래밍 방향 - 소켓 방법 : 명시적으로 끊을 떄까지 지속해서 연결을 유지하는 방법 (TCP, UDP를 통한 화상통화, RPG 게임) - 비연결성 방법 : HTTP/HTTPS * 앞으로 비연결성 방법에 관한 내용만 진행 2) 웹 서비스의 종류 (웹 서비스 : 웹 페이지 같은 것이 아닌 데이터만을 주고받을 수 있도록 설계된 모듈) - SOAP(Simple Object Access Protocol) : HTTP, HTTPS, SMTP등의 프로토콜들을 통해 XML(eXtensibal Markup Language)형태의 메시지 주고 받는 것 - RESTful (Representational State Transfer) : HTTP프로토콜을 통해 조금더 쉬운 ..