일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리팩토링
- UITextView
- 애니메이션
- combine
- uiscrollview
- HIG
- Human interface guide
- Xcode
- swiftUI
- collectionview
- clean architecture
- Observable
- ios
- Refactoring
- 클린 코드
- swift documentation
- UICollectionView
- 리펙터링
- SWIFT
- Clean Code
- 리펙토링
- map
- Protocol
- MVVM
- tableView
- RxCocoa
- uitableview
- ribs
- 스위프트
- rxswift
- Today
- Total
목록분류 전체보기 (1630)
김종권의 iOS 앱 개발 알아가기
1. 앱의 프로세스 구조 1) 엔트리 포인트(UIApplicationMain) : -> 내재적으로 존재하는 main()함수에서 UIApplicationMain를 호출(info.plist를 바탕으로 앱에 필요한 데이터와 객체 로드) -> UIApplication객체 반환 -> AppDelegate객체 생성하고 UIApplication객체와 연결 - UIApplication은 앱 그 자체(생성한 객체, 앱의 기능 모두 이곳에 포함되어 있는 하위 객체) - AppDelegate(싱글톤)는 UIApplication으로부터 위임받은 일부 권한을 이용하여 상호작용하는 역할 2) iOS12이하 앱의 라이프 사이클 : AppDelegate가 관리 - Not Running (앱이 시작되지 않았거나 시스템에 의해 종료된 ..
1. MVC - Model : 데이터 형태를 모아 놓은 것 또는 데이터들의 모임 1 2 3 4 5 6 7 8 import UIKit class MovieVO { var name: String! var rating: Double! var opendate: String! } - View : 사용자 입장에서 보여지는 부분 (스토리보드) - Control : Model과 View간의 관계를 연결, 관리 (controller) UIViewController에 뷰와 Model을 관리하는 역할이 정의되어 있으므로, 모든 ViewController는 이것을 상속받아서 사용 2. 기타 파일 1) AppDelegate.swift : 생명 주기 관리를 하는 파일(싱글톤, AppDelegate구현 한 클래스) 2) Launc..
1. 예외 처리 필요한 이유 - optional타입은 오류가 발생했을 때 오류에 대한 정보를 외부로 전달할 방법이 없음 2. 구현 방법 - 함수가 반환할 오류는 일관된 주제와 연관된 경우(문자열이 있을 때, 문자열 크기, 문자열 형식, 문자열 포멧형식 등의 체크) - 일관된 주제를 표현하기에 가장 좋은 것은 enum형 타입 1) enum에 오류타입명 정의 // enum형으로 error타입명 정의 ( 프로토콜을 구현한 것은 오류 타입으로 사용하라는 일종의 가독성 표시 ) enum DateParseError : Error { case overSizeString case incorrectData(part: String) } 2) 오류가 나는 조건을 명시 : throws와 throw로 선언 - 오류가 발생할 수..
1. Delegate Pattern : 프로토콜을 쓰는 대표적인 이유 - 각종 이벤트를 효율적으로 관리하기 위해 대리자를 지정하여 이벤트 처리를 위임하고, 이벤트 발생시 위임된 대리자가 콜백 메소드를 호출하는 설계 패턴 * protocol : 명세 - protocol입장에서 구현 하는 객체가 어떤 객체인지 상관없고, "날 구현하여 특정 일을 시행하라"라는 의미 - 클래스는 단일 상속이기때문에 protocol이 나온 것 2. 프로토콜 생성 1) 프로토콜 프로퍼티 : 연산 프로퍼티만 가능하며 get, set유무만 표현 2) 프로토콜 메소드 : 구현부만 빼고 그대로 작성 1 2 3 4 5 6 7 8 9 10 11 // 프로토콜 프로퍼티 protocol myProtocol { var a: String {get ..
1. 열거형 - 열거형을 이용하여 데이터 타입을 정의하면 컴파일 오류로 찾아내는데 용이 ( 배열과 같은 집단 자료형은 런타임 오류 발생) 1) 사용방법 1 2 3 4 5 6 7 8 9 enum MyEnum { case ABC case B case C, D } let a = MyEnum.ABC print(a) // ABC let b: MyEnum = .B // 열거형을 선언시, 생략하여 사용 가능 - 타입이 지정된 enum : 값에 접근하는 경우는 rawValue로 접근 1 2 3 4 5 6 7 8 9 10 enum MyEnum: Int { case ABC = 123 case B = 2 case C = 4 } let a: MyEnum = .ABC print(a) // ABC print(a.rawValue)..
1. 특성 - 단일 상속만 지원 ※ protocol은 다중 구현 가능 1 2 3 4 5 6 7 8 import UIKit class C1{ } class C2: C1, UIContentContainer, UIAppearanceContainer{ // 다중 구현한 protocol과 단일 상속한 C1구별 } 2. 오버라이딩 - override키워드 붙임 - 메서드 뿐만 아니라 연산프로퍼티 변수 또한 오버라이딩 가능 - 수정 할 수 있는 변수로 하려면 역시, set키워드 넣을 것 - didSet, willSet이용 가능 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import UIKit class Machine{ var name: String = ..
1. 구조체와 클래스의 차이 - 클래스만이 가지고 있는 특성 : 상속, 타입 캐스팅, 소멸화 구문, 참조에 의한 전달 - 구조체만이 가지고 있는 특성 : Memberwise Initializer ( 모든 인자값을 받고 초기화 해주는 구문을 자동으로 생성) 1 2 3 4 5 6 7 8 9 10 struct MyStruct{ var a : Int = 1 var b : Int = 2 func f () -> () { } } MyStruct() // 기본 초기화 MyStruct(a: 1, b: 2) // 모든 인수 초기화 - 구조체는 값에 의한 복사이고 클래스는 주소를 넘겨줌 - 클래스는 메서드에서 멤버변수를 바꿀 수 있지만, 구조체는 메서드에서 멤버변수에 있는 값을 바꾸려면 mutating 키워드를 사용해야함 ..
1. 클로저표현식 : 익명함수, 주변 환경으로부터 값을 "캡쳐"(휘발성인 지역변수의 값이 저장되는 것)할 수 있는 경량 문법 즉, 클로저라는 것은 리턴된 타입(어떤 함수의 종료)을 참조할 때, 함수가 이미 종료된 시점에서 특정 변수를 참조하는 것 - 클로저표현식은 익명함수로 생각하면 편함 - func키워드, 함수이름 제거한 후 나머지만 표현 1) 기본 사용법 // 대입 후 실행 let a = { (v1: Int, v2: Int) -> Void in print("value1 = \(v1), value2 = \(v2)") } a(1,2) // 바로 실행 ({ (v1: Int, v2: Int) -> Void in print("value1 = \(v1), value2 = \(v2)") }) 2) 생략 // 정..