पृष्ठभूमिमैं एनएससीओडर का उपयोग करके एनम को एनकोड कैसे कर सकता हूं?
मैं NSCoding प्रोटोकॉल का उपयोग कर एक स्ट्रिंग शैली enum एन्कोड करने के लिए कोशिश कर रहा हूँ, लेकिन मैं करने के लिए परिवर्तित करने त्रुटियों में चल रहा हूँ और वापस स्ट्रिंग से।
मैं निम्नलिखित त्रुटियाँ मिलता है जबकि डिकोडिंग और एन्कोडिंग: कॉल
कोड
enum Stage : String
{
case DisplayAll = "Display All"
case HideQuarter = "Hide Quarter"
case HideHalf = "Hide Half"
case HideTwoThirds = "Hide Two Thirds"
case HideAll = "Hide All"
}
class AppState : NSCoding, NSObject
{
var idx = 0
var stage = Stage.DisplayAll
override init() {}
required init(coder aDecoder: NSCoder) {
self.idx = aDecoder.decodeIntegerForKey("idx" )
self.stage = aDecoder.decodeObjectForKey( "stage") as String // ERROR
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(self.idx, forKey:"idx" )
aCoder.encodeObject( self.stage as String, forKey:"stage") // ERROR
}
// ...
}
में:
स्ट्रिंग
अतिरिक्त तर्क ForKey चरण के लिए परिवर्तनीय नहीं है
आप के रूप में है, तो! तो स्ट्रिंग कभी शून्य नहीं हो सकता है और '?? डिस्प्लेअल 'बेकार है। इसके बजाय यह 'as? 'नहीं होना चाहिए? – Oren
'as!' 'स्ट्रिंग 'कास्टिंग कर रहा है जो मौजूद है इसलिए कलाकार सफल होगा। 'चरण (rawValue:" someString ") 'एक वैकल्पिक देता है क्योंकि स्ट्रिंग मान्य एनम मान को परिभाषित नहीं कर सकती है। आपको उस वैकल्पिक को खोलना होगा। * शून्य कॉल्सिंग ऑपरेटर * उस वैकल्पिक को अनचाहे संस्करण के साथ बदल देता है यदि यह मौजूद है या 'डिस्प्लेअल' अगर ऐसा नहीं होता है। – vacawama