목록swift (19)
sanichdaniel의 iOS 개발 블로그
요약 Identifiable, ObjectIdentifier, Equality, Identity 개념들을 묶어서 정리해보았다 Identifiable A class of types whose instances hold the value of an entity with stable identity. public protocol Identifiable { /// A type representing the stable identity of the entity associated with `self`. associatedtype ID : Hashable /// The stable identity of the entity associated with `self`. var id: Self.ID { get } } Ob..
요약 Set의 원소 Dictionary의 키값으로 내가 만든 타입을 사용하려는 경우 Hashable을 채택을 해야 된다. 특정 조건만 만족이 된다면, Hashable 채택만으로 기본 구현이 제공된다. 이때 조심해야하는건, Set, Dictionary의 contains 함수는 hashValue를 비교하여 존재여부를 파악한다. swift 현재 버전에서는 hash(into:) 함수로 hashValue가 생성되는데, hash(into:) 함수에서 Equatable 구현에서 비교에 사용되는 프로퍼티에 맞추어 combine(:)을 호출해주지 않으면 contains(:) 함수가 비정상적으로 동작할수 있다. 애플 공식 문서의 정의는 A type that can be hashed into a Hasher to produ..
Property Wrapper 내부에서 enclosing self 를 접근하는 방법으로 KeyPath를 이용하는 해결방안이 있었는데 KeyPath가 뭐지.. 알아보자! 정의 KeyPath는 타입의 프로퍼티 값을 읽거나, 수정하지 않고 참조하는 방법을 말합니다. Swift 4 전까지는 KeyPath를 사용하려면 클로져로 래핑하거나, #keyPath() 문법을 써야했으나, 4부터는 사용하기 편리하도록 바뀌었다. struct Person { let name: String func greet() { print("Hello \(name)!") } } let p = Person(name: "Samus") let greeter = p.greet // stores the method without evaluating ..
Generic where문을 사용하며 문법이 헷갈리는 경우가 많아 정리해보았다 제너릭 where문으로 type paramter과 associated type에 추가적으로 더 요구사항을 줄 수 있다 where 요구사항 요구사항은 type paramter가 특정 클래스를 상속받거나, 프로토콜을 채택함으로 나타낸다. -> where T: Comparable 요렇게 문법적 슈가로 쓸수도 있지만 where S.Iterator.Element: Equatable 로 사용하여, S 가 Sequence protocol 채택하고, associated type S.Iterator.Element가 Equatable protocol을 채택함을 나타낸다. where S1.Iterator.Element == S2.Iterator...