2014-10-20 2 views
4

String 속성과 NSImage 속성이있는 'Thing'개체가 있습니다. Thing 클래스는 encodeWithCoder :와 decodeWithCoder : 메소드를 가지고 있으며, NSKeyedArchiver/Unarchiver를 사용하여 [Thing] 배열을 보관하고 보관 취소 할 수 있습니다.스위프트 열거 형 및 NSCoding

지금까지 그렇게 좋았습니다. 지금은 '방향'은 다음과 같은 열거 인 방향의 배열에 의해 나의 것 클래스를 확장하려는 : 즉

enum Direction{ 

case North(direction:String) 
case East(direction:String) 
case South(direction:String) 
case West(direction:String) 

} 

, 내가 저장하고자하는 데이터는

thing1.directions: Direction = [.North("thing2"), .South("thing3")] 

(에서 더 완벽한 세상이라면, 나는 단지 자신의 이름보다는 내 물건에 대한 직접적인 참조를 사용할 것입니다. 그러나 이것이 참조주기를 쉽게 만들 것이라는 것을 깨달았습니다 - 그 것이 만들어 질 때까지 다른 것의 참조를 설정할 수 없습니다. 내 앱 데이터를 저장하고 계속 진행하는 빠르고 더러운 방법을 찾고 있습니다.)

다른 곳에서 지시가 필요할 것이므로이 클래스는 Thing 클래스의 열거 형이 아닌 별도의 엔티티입니다. (그 차이가 있는지 여부는 확실하지 않습니다.)

Direction enum이 NSCoding을 준수하도록하는 가장 좋은 방법은 무엇입니까? 가장 좋은 해결 방법은 "North"와 "South"를 키로 사용하고 "thing2"와 "thing3"을 값으로 사용하여 [String : String] 사전을 만들고 그로부터 enum 속성을 재구성하는 것입니다. 더 나은 방법? 그리고 지금 당장 (String, String) 프로토콜 "AnyObject"오류와 호환되지 않기 때문에 튜플이 NSCoding을 따르게하는 방법이 있습니다.

감사합니다.

답변

5

내가하는 일은 열거 형에 형식을주고 인코딩하고 디코딩하는 것입니다. 그렇지 않으면 열거 형에 description을 구현하고 해당 문자열을 인코딩하고 디코딩합니다. 어느 쪽이든 (또는 다른 방법으로 사용하는 경우), 열거 자와 보관 가능한 형식간에 양방향으로 변환하는 방법이 분명히 필요합니다.

+0

어떻게'description'을 (를) 인코딩/해독합니까? 예를 들어, 다음과 같은 초기화 오류가 발생합니다 :'Direction (description : (aDecoder.decodeObjectForKey ("direction")! String))) ?? .North' – Anconia

+0

@Anconia 질문으로 질문하십시오. 제발 의견이 아닙니다. 여기에 대해 이야기 할 여지가 없습니다 ... :) – matt

+0

답변을 주셔서 감사합니다. 귀하의 서평을 구입합니다 :-) – Anconia