2014-10-18 74 views
7

编码/雨燕为(6.1的Xcode)解码枚举

var priority : Priority! = Priority.defaultPriority 

func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeInteger(priority.toRaw(), forKey: "priority") //toRaw may not yield the result I am expecting 
    } 

    required init(coder aDecoder: NSCoder) { 
     priority = aDecoder.decodeIntegerForKey("priority") //complaining about conflicting types 
    } 

与枚举为以下几点:

enum Priority : Int { 
     case defaultPriority = 0 
     case lowPriority = 1 
     case mediumPriority = 2 
     case highPriority = 3 
    } 

什么是编码的最好方法/解码呢?

+0

相似问题:http://stackoverflow.com/questions/26326645/how-do-i-encode-enum-using-nscoder-in-swift。 – 2014-10-18 08:59:39

回答

17

Priority.init(rawValue:)应该工作。

func encodeWithCoder(aCoder: NSCoder) { 
    aCoder.encodeInteger(priority.rawValue, forKey: "priority") 
} 

required init(coder aDecoder: NSCoder) { 
    priority = Priority(rawValue: aDecoder.decodeIntegerForKey("priority")) 
} 
+1

感谢您为6.1添加更新。 – jpittman 2014-10-21 07:00:46

+0

非常感谢您的帮助。 – Aaronium112 2016-07-09 18:10:00