일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- basic
- flutter
- pubspec
- github
- ToDoRim
- SwiftGen
- Extentsion
- UIAccessibility
- Widget
- dart
- keyWindow
- COMMIT
- toyproject
- Leetcode
- xcode
- listview
- IOS
- designPattern
- algorithm
- GIT
- Swift
- tip
- pubspec.yaml
- OSLog
- Equatable
- protocol
- enumerations
- it
- reetcode
- swiftlint
- Today
- Total
수니의 개발새발
[iOS/Swift] Identifiable 본문
📌 이번 글은
Identifiable 개념과 사용법입니다.
Apple Developer
iOS 13.0+
iPadOS 13.0+
macOS 10.15+
Mac Catalyst 13.0+
tvOS 13.0+
watchOS 6.0+
Xcode 11.0+
Identifiable은 Protocol
Protocol은 특정 작업이나 기능에 적합한 메서드, 프로퍼티 및 기타 요구사항을 정의해주고,
이러한 Protocol은 class, struct, enum에서 채택하여 이런 요구사항을 실제로 구현할 수 있도록 도와줍니다.
즉, Protocol은 메서드, 프로퍼티 등을 정의만 하고, 이 Protocol을 채택한 곳에서 구현을 합니다.
먼저 Identifiable의 경우, 이미 애플에서 만들어 놓은 Protocol입니다.
우리는 이제 필요한 곳에 채택하여 애플이 정의해놓은 요구사항에 맞춰 구현하면 됩니다!
Identifiable 개념
A class of types whose instances hold the value of an entity with stable identity.
struct와 class를 정의할 때 ID가 필요한 경우 채택
예로 도서 관리 앱에서 DB에 여러 개의 도서 정보를 저장해야 한다고 가정하면 도서의 식별 값이 필요합니다.
그래야 도서의 이름과 같은 정보를 변경해도 식별 값으로 특정 도서들을 식별할 수 있기 때문입니다.
식별 값이란 당연히 고유해야 합니다. 그때 Identifiable Protocol을 채택하여 우리는 고유한 식별 값을 만들 수 있습니다.
Identifiable 정의
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
public protocol Identifiable {
/// A type representing the stable identity of the entity associated with
/// an instance.
associatedtype ID : Hashable
/// The stable identity of the entity associated with this instance.
var id: Self.ID { get }
}
Identifiable 사용
1. Book 이라는 도서 정보 구조체(struct) 생성
도서(Book)를 식별할 id가 필요합니다.
id를 사용하기 위하여 Identifiable을 채택합니다.
2. 그룹을 식별할 식별 값 필요 - Identifiable 채택
채택을 해줬더니, 오류가 납니다.
Identifiable의 프로토콜을 준수하지 않았기 때문입니다.
3. Identifiable 준수
이제 오류가 발생하지 않습니다.
+ typealias 를 사용하여 코드를 명확하게 수정하였습니다.
'iOS - Swift' 카테고리의 다른 글
[iOS/Swift] typealias (0) | 2022.02.02 |
---|---|
[iOS/Swift] Generic (0) | 2022.02.02 |
[iOS/Swift] Equatable (0) | 2022.01.25 |
[iOS/Swift/Basic] 튜플 Tuple (0) | 2022.01.22 |
[iOS/Swift/Basic] Any, AnyObject와 nil (0) | 2022.01.22 |