일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- uitableview
- 스위프트
- Protocol
- clean architecture
- Observable
- ribs
- collectionview
- RxCocoa
- ios
- Human interface guide
- 리팩토링
- Clean Code
- HIG
- SWIFT
- MVVM
- UITextView
- UICollectionView
- Refactoring
- 리펙토링
- 리펙터링
- Xcode
- 애니메이션
- map
- swift documentation
- swiftUI
- 클린 코드
- combine
- uiscrollview
- tableView
- rxswift
- Today
- Total
목록제네릭스 (4)
김종권의 iOS 앱 개발 알아가기
* 추상화하기 목차: https://ios-development.tistory.com/1627 프로토콜과 제네릭스 사용하는 목적 파악하기 프로토콜 사용 목적? protocol을 타입(existential type)으로하고 구현체를 assign하는 패턴으로하면 구현체의 변경할 때 유연성이 증가 구현체에는 여러 구현 코드가 섞여서 정말 사용하는쪽에서만 필요한 인터페이스만 보려면 가독성이 떨어지지만 protocol을 타입으로한다면 사용하는 쪽에서 필요한 스펙 파악이 용이 제네릭스 사용 목적 코드의 재사용성 중복 제거 포로토콜에 제네릭스 사용의 이해 프로토콜에는 associated type 키워드를 사용하여 제네릭스 사용이 가능 ex) cell타입을 추상화하기 위해서 protocol을 사용했고 이 proto..
* 추상화하기 목차: 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, _..
AnyHashable Hashable을 wrapping하고 있는 구조체 @frozen public struct AnyHashable { public init(_ base: H) where H : Hashable public var base: Any { get } public static func != (lhs: AnyHashable, rhs: AnyHashable) -> Bool } Hashable이 있는데 굳이 이를 wrapping한 AnyHashable을 만든 이유? associatedtype을 사용하는 프로토콜인, "제네릭 프로토콜"을 콜렉션 타입으로 설정하면 컴파일 에러 발생 Hashable은 제네릭 프로토콜이므로 Hashable을 감싸서 콜렉션 타입에 유연하게 사용하기 쉽도록 하기 위해서 Any..
existential any 개념 protocol에서 generic을 지정해줄 때 any 키워드를 사용하여 편리하게 generic 처리를 할 수 있는 것 protocol ABC { associatedtype MyType } // 기존 - 제네릭 선언해야함 func printValue(type: T) { print(type) } // any 키워드 사용 - 제네릭을 따로 선언해주지 않아도 됨 func printValue2(type: any ABC) { print(type) } protocol 타입 다루기 DIP원칙과 테스트에 용이한 구성을 위해서 데이터 모델을 protocol로 참조되게 설정 ex) 모델이 MyItem이고, 이 모델은 MyItemable 프로토콜을 따르게 한 후 사용하는쪽에서는 MyItem..