일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ios
- swift documentation
- Human interface guide
- clean architecture
- Protocol
- ribs
- MVVM
- RxCocoa
- uiscrollview
- 리펙토링
- 리팩토링
- rxswift
- combine
- uitableview
- map
- 리펙터링
- SWIFT
- swiftUI
- Xcode
- Observable
- collectionview
- 스위프트
- UICollectionView
- 클린 코드
- tableView
- 애니메이션
- Refactoring
- UITextView
- Clean Code
- HIG
- Today
- Total
목록iOS 기본 (swift) (149)
김종권의 iOS 앱 개발 알아가기
기본형 단순 타입 구분 (내부적으로 타입 구분용도) enum urlType { case naver case google } 타입을 추가한 형태 값을 명시하지 않으면 (google) 자동으로 타입의 이름으로 매핑됨 enum urlType: String { case naver = "Naver" case google // "google"로 매핑 } String의 값을 enum값으로 매핑시키는 방법 (예시) response로 문자열을 받은 경우, 문자열을 enum으로 매핑할때 필요) let googleUrl = "google" if let urlType = UrlType(rawValue: googleUrl) { // case문에 없으면 nil로 매핑됨 switch urlType { case .naver: rou..
디폴트로 저장되어 있는 방향 전환 info.plist에 명시된 내용 간단하게 설정 방법: AppDelegate에서 설정 AppDelegate 우선순위가 가장 높기 때문에 info.plist의 값에 영향을 받지 않고 정해짐 func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { return [.portrait] } 배열에 넣어주면 해당되는 옵션 추가
becomeFirstResponder와 키보드 상승 타이밍 UITextfield창을 탭한 경우 텍스트 필드 간에 short press를 하면 resignFirstResponder가 되어도 키보드가 등장한채로 유지 : A becomeFirstResponder -> 키보드 상승 -> A resignFirstResponder -> B becomeFirstResponder (키보드 유지) 텍스트 필드 간에 ong press를 하면 resignFirstResponder가 될 경우 키보드가 사라졌다가 재등장 : A becomeFirstResponder -> 키보드 상승 -> A resignFirstResponder -> 키보드 하강 -> B becomeFirstResponder -> 키보드 상승 UILongPres..
* 더욱 자세한 static framework외 dynamic framework 개념은 최신 포스팅 글 참고 프레임워크 vs 라이브러리 라이브러리 - "사용하는 주체"가 기능을 요청하며 사용 (언제 요청 할지, 언제 응답 받을지, 언제 결과 처리할 지 모두 주체가 결정) 프레임워크 - "사용하는 주체"와 기능의 제어권이 역전 IoC (Inversion of Control) RxSwift와 같이 bind 시켜놓으면 (제어권 부여), 이벤트 일어날 시 처리되는 (제어의 역전) 로직 Inversion of Control의 장점 재사용성 증가 관심사의 분리: As a Service (사람이 전기를 사용할 때 toggle switch만 키면 됨 - 관심사의 분리) DI(Dependency Injection)과의 ..
일급객체 함수는 일급 객체 일급 객체란 변수에 저장하거나 파라미터로 넘길 수 있는 속성 escaping이란 함수가 해당 함수 내부에서만 사용되지 않고 다른 곳으로 저장하거나 참조하거나 파라미터로 넘길 수 있는 의미(==현재 함수를 탈출) 함수에서의 escaping이란 함수 내부에서 사용해야할 것이 외부에서 참조되거나 파라미터로 넘겨지는 현상 함수라는 것은 파라미터(인수)또한 포함되는 개념 예제) 아래 두 가지 케이스 모두 @escaping을 쓰지 않으면 컴파일 오류 발생 함수의 escaping: 외부에서 저장하는 경우 : completion이라는 인수가 escaping되어, sampleFunc라는 함수는 escaping됨 class ViewController: UIViewController { overr..
update cycle: 유저로부터 이벤트 핸들링 코드 수행 main run loop: view들을 배치(layout), 가시(display), 제약(constaint) Layout이란? View의 위치와 크기 LayoutSubviews View와 자식 View들의 위치와 크기를 재조정 레이아웃 업데이트 시 직접적인 호출 불가: 재귀적으로 모든 자식 뷰의 layoutSubviews까지 호출해야 하므로 부하가 큰 작업 직접적으로 호출을 지양하므로 간접적으로 호출할 수 있는 방법이 디폴트: view의 layout변화(resizing, subview추가, 스크롤, 회전) LyaoutSubviews를 명시적으로 호출하는 방법 setNeedsLayout(): 바로 올 update cycle에 view의 layou..
원인: LaunchScreen을 info.plist에서 삭제하여 위와같은 버그 발생 info.plist에 LaunchScreen추가 다시 실행 -> 해결 완료
switch문을 if, guard 문으로 바꾼 것 switch문은 "=" 앞에 타입(case)을 명시하지만, if case let, guard case let문은 "=" 앞에 값을 명시 enum 정의 enum Person { case name(String) case age(Int) } switch 문 switch person { case .name(let nameValue): print(nameValue) case .age(let ageValue): print(ageValue) } switch문 -> if case let // 앞에 case문 타입을 먼저 쓴 후 뒤에 값이 위치 if case let Person.name(nameValue) = person { print(nameValue) } switch..