Codable, Hashable, Identifiable 이 세 가지 프로토콜을 사용하는 이유를 잘 모르고 단순히 ForEach나 디코딩을 위해 채택했습니다. 이제는 제대로 이해하고 싶어 블로그를 작성하면서 공부할 계획입니다.
/// 스스로 외부 표현으로 변환하거나 외부 표현으로 변환할 수 있는 유형입니다.
///
/// Codable
은 Encodable
과 Decodable
프로토콜의 타입 별칭입니다.
/// Codable
을 타입이나 일반 제약 조건으로 사용하면 다음과 일치합니다.
/// 두 프로토콜을 모두 준수하는 모든 타입과 일치합니다.
do {
let decodedData = try JSONDecoder().decode(T.self, from: data)
completion(.success(decodedData))
} catch let decodingError {
if let jsonString = String(data: data, encoding: .utf8) {
jhPrint("""
path: \(path),
code: \(httpResponse.statusCode),
Decoding Error: \(decodingError.localizedDescription),
Decoding message: \(jsonString)
""" , isWarning: true)
}
completion(.failure(.decodingFailed(decodingError)))
}
/// 해시 값입니다.
///
/// 해시 값은 프로그램의 여러 실행에서 동일하게 보장되지 않습니다.
/// 프로그램의 다른 실행에서 동일하다고 보장되지 않습니다. 향후 실행 중에 사용할 해시 값을 저장하지 마세요.
///
/// 중요:해시값
은해시가능
요구사항으로 더 이상 사용되지 않습니다. To
/// 해시 가능을 준수하려면 대신
hash(into:)요구 사항을 구현하세요. /// 컴파일러는
hashValue에 대한 구현을 제공합니다. /// 이 값의 필수 구성 요소를 주어진 해셔에 공급하여 /// 주어진 해셔에 공급하여 해시합니다. /// /// 이 메서드를 구현하면
Hashable프로토콜을 준수합니다. 해싱에 사용되는 /// 해싱에 사용되는 컴포넌트는 비교되는 컴포넌트와 동일해야 합니다. /// 타입의
==연산자 구현에서 비교한 컴포넌트와 동일해야 합니다. 해셔.결합(_:)
을 호출합니다.
/// 를 호출합니다.
///
/// - 중요:hash(into:)
구현에서,
/// 제공된해셔
인스턴스에서finalize()
를 호출하지 마세요,
/// 또는 다른 인스턴스로 대체하세요.
/// 그렇게 하면 나중에 컴파일 타임 오류가 발생할 수 있습니다.
///
/// - 파라미터 해셔: 이 인스턴스의 컴포넌트를 결합할 때 사용할 해셔입니다.
///를 결합할 때 사용할 해시입니다.
자이게 뭐냐
참고: GPT