애니메이션 처리를 하던 도중 계속해서 애니메이션이 @State 의 변경에도 불구하고 변경되지 않는 것을 확인하엿다. 왜그런가 해서 다른사람들이 처리한 애니메이션을 봤는데 다른사람은 AnimationHash라는 클래스를 설정해서 애니메이션이 변경되도록 처리해주어서 해당 코드를 분석한 결과 Identifiable이라는 프로토콜을 채택하는것으로 문제를 해결했다고 생각이 들어서 이에 대해서 정리해본다.
identifiable
identifiable이란 프로로토콜로, instance 가 stable identity를 가지도록 하는 프로토콜이다.
여기에서 말하는 stable identity란, being able to see yourself as same person in the past, and future로, 생성된 인스턴스들이 분명하게 서로 다른 값이라는 비교가 가능하도록 하는 프로퍼티를 의미한다.
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은 Hashable한 id값을 가지게 된다.
여기에서 가지는 id값은 유니크한 값이다.
즉 identifiable이란 유니크한 id값을 강제할수 있는 프로토콜이다.
예시
Struct AnimationHash: identifiable {
var id = UUID()
var animation: Animation
}
여기에서 identifiable을 채택하는것으로 id라는 프로퍼티를 가져야하며, 해당 id값은 uuid()를 통해서 고유의 값을 가지게 된다. (여기에서 uuid를 string으로 주고싶다면, UUID().uuidString 으로 주면된다.)
이러한 방식을 통해서 AnimationHash의 인스턴스는 생성될때 마다 고유한 완전한 다른 인스턴스라는것을 uuid를 통해서 보장받게 된다
참고자료
https://ios-development.tistory.com/m/585https://ios-development.tistory.com/m/585
Uploaded by N2T