일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- swift documentation
- rxswift
- MVVM
- Protocol
- Clean Code
- UITextView
- uitableview
- UICollectionView
- 리팩토링
- 클린 코드
- clean architecture
- Xcode
- collectionview
- map
- ribs
- tableView
- SWIFT
- HIG
- combine
- 리펙토링
- Refactoring
- ios
- Observable
- 스위프트
- swiftUI
- 리펙터링
- Human interface guide
- RxCocoa
- uiscrollview
- 애니메이션
- Today
- Total
목록2024/01 (22)
김종권의 iOS 앱 개발 알아가기
* 추상화하기 목차: https://ios-development.tistory.com/1627 제네릭스의 목표 공통화, 추상화, 코드의 유연성 구체적인 내용은 이전 포스팅 글 참고 제네릭스 훑어보기 - 함수에 적용 함수에 적용 - 함수 이름 오른쪽에 꺽쇠를 사용하여 타입 표현 before) func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } func swapTwoStrings(_ a: inout String, _ b: inout String) { let temporaryA = a a = b b = temporaryA } func swapTwoDoubles(_ a: inout Double, _..
Existential Type 개념 * Existential: "존재하는" Existential Type는 protocol를 명시적으로 타입을 지정하는 경우, 그 protocol을 Existential Type이라고 명칭 ex) 아래 SomeProtocol을 Existential Type이라고 명칭 let instance: SomeProtocol = SomeClass() Existential Any 개념 Existential Type을 사용할 때, dynamic dispatch가 일어나고 적지않은 메모리 할당 등 비용이 비싼 단점이 존재하여 프로그래머에게 Existential Type을 사용할땐 주의하게끔 any 키워드를 붙여서 사용하라는 의미 (비용관련 내용) (any 키워드를 붙여야 하는 이유 - 실..
* 추상화하기 목차: https://ios-development.tistory.com/1627 추상화란? 복잡성을 숨기고 필요한 부분만을 노출시키는 것 특정한 타입에 의존하지 않고 일반화하여 작성 > 코드의 유연성과 재사용성 상승 추상화의 목적 추상화한다는 것은 일종의 DIP(Dependency Inversion Principle)의 목적과도 유사 DIP는 구현체에 의존하지 않고 인터페이스(protocol)에 의존하게끔하여, 구현체의 변경이 유연하게 가져갈 수 있다는 개념 DIP 구체적인 개념은 이전 포스팅 글 참고 코드의 유연성, 재사용성 상승 추상화의 종류 generics 사용 커스텀 뷰를 만들 때 Generics를 사용하여 값을 표현 class GenericInputView: UIView { var..
1. 추상화의 개념과 목적 2. 제네릭스로 추상화하기 3. 프로토콜에 제네릭스 사용하는 추상화 이해하기
시뮬레이터 분기 방법 #if targetEnvironment(simulator) 사용 #if targetEnvironment(simulator) print("simulator") #else print("no simulator") #endif 아키텍쳐, os 분기 방법 아키텍쳐는 arch() 사용, os는 os() 사용 os() 안에 넣을 수 있는 것 macOS, iOS, watchOS, tvOS, Linux, Windows, FreeBSD, Android, PS4 arch() 안에 넣을 수 있는 것 x86_64, arm, arm64, i386, powerpc64, powerpc64le, s390x ex) 사용 예시 // macOS 시뮬레이터 분기 #if (arch(i386) || arch(x86_64))..
일반적인 DataSource 관리 Section이 여러개이고 Item도 여러개인 경우, 보통 dataSource를 2차원 배열로 하거나, Section과 Item을 갖는 struct를 만들어서 관리 class ViewController: UIViewController { struct Section { var title: String var items: [String] } var sections: [Section] = [ Section(title: "header is a", items: ["A1", "A2"]), Section(title: "header is b", items: ["B1", "B2"]), ] let tableView: UITableView = {...} } extension ViewCont..
한곳에 방대해지는 코드 한곳에 여러가지의 프로퍼티, 메서드들이 들어가다보면 방대해지는 문제점이 존재 방대해지는 것을 막을 수 있는 방법은 로직을 위임하는 방법 (단순 코드 분리는 extension으로도 가능하지만 로직 자체를 위임하는 방법이 더욱 코드 관리에 용이) ex) 아래처럼 ViewController하나에서 여러 상태가 저장되고 계산하는 상태 현재는 프로퍼티와 func가 많이 없어서 복잡하지 않지만 계속 늘어나면 관리가 힘들어지는 현상이 발생 class ViewController: UIViewController { var info = 1 var sampleString = "str" override func viewDidLoad() { super.viewDidLoad() } func someFunc..
nested protocol swift 5.10 아래 버전에서는 아래처럼 protocol을 struct/class/enum/actor/function 하위에 정의가 불가능 swift 5.10 이전에서 Delegate protocol을 만들려고하면 아래처럼 외부에 Delegate를 정의하고, 안에서도 접근할때 fullName으로 접근해야함 (TableView안에 protocol 정의가 가능하면 외부에서는 TableView.Delegate로 접근이 가능하고, 내부에서는 단순히Delegate 이름으로만 접근이 가능) class TableView: UIView { weak var delegate: TableViewDelegate } protocol TableViewDelegate { } swift 5.10부터는..