일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- map
- 클린 코드
- 스위프트
- Protocol
- clean architecture
- SWIFT
- Clean Code
- Human interface guide
- ribs
- Xcode
- UITextView
- UICollectionView
- swift documentation
- collectionview
- uitableview
- rxswift
- 리펙터링
- tableView
- uiscrollview
- 리펙토링
- combine
- HIG
- Observable
- MVVM
- 리팩토링
- swiftUI
- ios
- Refactoring
- RxCocoa
- 애니메이션
- Today
- Total
목록분류 전체보기 (1642)
김종권의 iOS 앱 개발 알아가기
Codable이란? Encodable + Decodable 두 속성 모두 가지고 있는 타입 Encodable: 스위프트의 struct구조의 "객체"를 "json형식"으로 변한 하는 것 (Binary Data로 변환) Decodable: "json형식"을 "객체"로 변환 필요한 이유: 서버와 통신할 경우, 객체 그대로를 보내지 / 받지 않고, Binary Data로 통신 Encode swift의 struct객체 -> Binary Data (json형) struct정의 struct Person: Codable { var name: String var age: Int var birthDate: Date } Encode_ Binary데이터 변환 // create let person = Person(name: "..
* XCoordinator를 이용하여 모든 화면에서 NavigationController하나를 공유하며 화면전환 하는 방법 + 딥링크를 고려한 코드 스타일 적용 Xcoordinator개념편은 여기 참고 사전 지식 - XCoordinator에서는 strongRouter와 UnownedRouter가 있는데, 자식들을 계속 참조하며 잃지 않으려면 strongRouter로 사용 단, push와 같이 Transition을 반환하게 되면, strongRouter이후에 unownedRouter로 전달해도 참조를 잃지 않음 - Coordinator에서 다른 Coordinator로 이동 시키려면, addChild(_:) -> Transition함수를 정의하여 이 값을 리턴해야지만 deeplink가 가능한 구조 addCh..
sc특정 textField를 탭한 경우, 특정 위치로 scroll시키는 로직 ScrollView만들기 여기 참고 방향 정의 public enum ScrollDirection { case top case center case bottom } extension으로 scroll이동 구현 public extension UIScrollView { func scroll(to direction: ScrollDirection) { DispatchQueue.main.async { switch direction { case .top: self.scrollToTop() case .center: self.scrollToCenter() case .bottom: self.scrollToBottom() } } } private f..
info.plist에서 해당 부분 삭제 AppDelegate.swift에서 함수 두 가지 삭제 SceneDelegate.swift삭제 후 AppDelegate 수정 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = ViewController() // 특정 ViewController window?.makeKeyAndVisible() return true } (정상 빌드 성공)
Coordinator란 - 화면 전환하는 역할을 "Coordinator"라는 것에 부여 - viewModel에서 trigger를 통해 화면전환을 요청 Coordinator의 이점 화면간의 연결이 쉬움 DI이 쉬워짐 (의존성 주입을 통해 소크 코드 내부가 아닌 외부에 정의하도록 하여 의존성을 분리시키는 것) ViewController에서 네비게이션 코드 삭제 XCoordinator사용 XCoordinator프레임워크 import // pod install pod 'XCoordinator' // import import XCoordinator Coordinator가 될 클래스 정의 enum을 사용하여 화면에 전달될 인수(dependencies)를 함께 전달 NavigiationCoorinator 클래스 작성..
nib파일의 구성 인터페이스 빌더에서 정의한 요소들을 object grpah로 만든 파일 인터페이스 빌더에서 정의한 요소란? 색상, 폰트, ViewController등 인터페이스 빌더에서 구성된 파일: XML형태의 .xib지만, 컴파일 하면 .nib파일이 됨 저장되는 위치는 App Bundle iOS 앱의 파일 구조 iOS앱은 보안의 목적으로 자신이 속한 샌드반스안의 디렉토리에만 접근 가능 Bundle Contatiner: 파일 시스템 중 한 디렉토리 (실행 가능한 코드, 사진, 소리, nib파일 등의 자원) Data Container: 사용자를 위한 Data 기타 앱이름.app:이 디렉토리는 read-only권한만 부여되며 iCloud에 백업 x Documents/: 사진첩과 같은 앱의 사용자에게 보여..
struct와 class 중에서 어떤 것을 사용할지 정하는 기준 상속이 필요하지 않고 모델이 크지 않으면 struct 사용 json파싱할 경우 struct사용 serialize해서 전송하거나 파일로 저장할 일이 있다면 class사용 Obj-C에서도 사용하려면 class사용 * serialize: 객체를 직렬화 하여, 전송 가능한 파일 형태로 만드는 것 struct call-by-value: closure에 의해 capture되는 경우도, reference copy stack memory할당(빠른 속도) scope base lifetime: 컴파일 타임에 complier가 언제 메모리를 할당/해제할지 알고 있음 data locality: 캐시 히트율이 높음 Codable 프로토콜을 통해 JSON ..
Default Initialize (기본 이니셜라이저) 클래스에서 이니셜라이저를 정의하지 않은 경우 Designated Initializers and Convenience Initializers Designated Init(지정초기화): 클래스의 모든 프로퍼티를 초기화 Convenience Init: 미리 지정된 값을 사용해서 최소한의 입력으로 초기화 할 수 이도록 해주는 초기자 Designated는 반드시 위임을 superclass로 해야하고, convenience는 같은 레벨에서 해야함 클래스 타입은 반드시 한 개 이상의 Designated Initialize가 있어야 함 Designated Initilize는 반드시 직계 superclass의 지정 init을 호출해야함 Convenience Init..