일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- ios
- collectionview
- clean architecture
- MVVM
- HIG
- Xcode
- Protocol
- 애니메이션
- tableView
- swift documentation
- swiftUI
- RxCocoa
- Clean Code
- combine
- UITextView
- Refactoring
- ribs
- rxswift
- Human interface guide
- 스위프트
- SWIFT
- 클린 코드
- Observable
- map
- 리팩토링
- 리펙토링
- UICollectionView
- uiscrollview
- 리펙터링
- Today
- Total
목록Type Erase (3)
김종권의 iOS 앱 개발 알아가기
any와 some 키워드 any와 some키워드는 type erase 방법 type erase: 코드의 추상화를 위해서 구체적인 타입을 지우는 것 3가지 메소드의 차이점? 3가지 모두 런타임에 타입이 결정되므로 dynamic dispatch로 동작 f2는 any를 붙여줌으로써 프로토콜을 사용하면 dynamic dispatch가 될것이라는 것을 명시적으로 표현했고 Swift6.0부터는 any키워드를 붙이지 않으면 컴파일 에러가 나게 변경 예정 (참고) f3도 원래는 사용하던 시점이 있었지만 any가 등장하면서 some을 any로 써도 무방하게끔 변경됨 (참고) protocol P {} func f1(p: P) { } func f2(p: any P) { } func f3(p: some P) { } any와 ..
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..
some 키워드와 any 키워드 함수의 파라미터에 some과 any 키워드를 사용하면 자동으로 타입을 추론할 수 있게끔 컴파일러가 동작 아래에서 알아볼 특정 케이스에서 protocol을 사용할때 컴파일에러가 나는 케이스가 존재하는데 이 컴파일에러를 없애고 간편하게 사용할 수 있도록 돕도록 나온것이 some과 any 키워드 컴파일러가 더욱 유연하게 구체적인 타입을 추론할수 있게 만드는 키워드 Protocol 타입 컴파일 에러 매개변수에 Protocol 타입을 직접 참조할 수 없는 케이스가 존재 왜 참조를 할 수 없을까? 프로토콜이 associatedtype을 선언하면 컴파일러가 해당 프로토콜을 참조를 제한하기 때문 만약 associatedtype이 프로토콜 내부에 없다면 바로 참조가 가능 swift5.7 ..