2016-09-10 9 views
6

स्विफ्ट 3 करने के लिए अपने खेल का मैदान कोड बदलने, Xcodeप्रकार 'त्रुटि' प्रोटोकॉल के अनुरूप नहीं है 'RawRepresentable'

enum Error: ErrorType { 
    case NotFound 
} 

बदलते सुझाव दिया

enum Error: Error { 
    case NotFound 
} 

लिए लेकिन अब मैं शीर्षक त्रुटि मिलती है और मैं इस प्रोटोकॉल के अनुरूप होने के लिए enum कैसे प्राप्त करें, यह नहीं पता।

उत्तर

24

समस्या यह है कि आपने अपना त्रुटि प्रकार Error नाम दिया है - जो मानक लाइब्रेरी Error प्रोटोकॉल के साथ संघर्ष करता है (इसलिए स्विफ्ट सोचता है कि आपको एक परिपत्र संदर्भ मिला है)।

आपको स्पष्ट करने के लिए Swift.Error के रूप में स्विफ्ट Error प्रोटोकॉल का उल्लेख कर सकते:

enum Error : Swift.Error { 
    case NotFound 
} 

लेकिन इसका मतलब यह होगा कि आपके मॉड्यूल में Error के लिए किसी भी भविष्य में संदर्भ के करने के लिए अपनेError प्रकार, नहीं भेजेगा स्विफ्ट Error प्रोटोकॉल (आपको फिर से असंबद्ध करना होगा)।

इसलिए अब तक का सबसे आसान समाधान आपके त्रुटि प्रकार को और अधिक वर्णनात्मक रूप से नामित करेगा।

+1

तो, पुराने संस्करण में, मैं अपने enum त्रुटि टाइप का नाम नहीं दे सका, लेकिन अब स्विफ्ट प्रोटोकॉल नाम को त्रुटि में बदल दिया गया है, मैं त्रुटि का उपयोग नहीं कर सकता, है ना? – Shades

+2

@ शेड्स यूप, यह सही है - यदि आप अपनी बिल्ड सेटिंग्स (जो स्विफ्ट 2.3 का उपयोग करेंगे) में "लीजसी स्विफ्ट भाषा संस्करण" का उपयोग "हां" में बदलते हैं, तो आप इसे अपने लिए आज़मा सकते हैं। – Hamish

2

यह त्रुटि तब होती है क्योंकि आप Error की मौजूदा घोषणा को "ओवरराइड" कर रहे हैं जो है। तो आपको अपने "त्रुटि" enum के लिए एक और (शायद अधिक वर्णनात्मक) नाम चुनना होगा।

1

मुझे यह समस्या भी मिली, हालांकि मैंने विशिष्ट नाम के साथ अपना enum घोषित किया।

कारण यह है कि मैं क्षेत्र का उपयोग कर रहा है और यह Error वर्ग है, जो Swift.Error और RealmSwift.Error के बीच भ्रामक बनाता है।

समाधान घोषणा में RealmSwift.Error निर्दिष्ट कर रहा है।

// before 
enum MyError: Error { ... } 
// after 
enum MyError: Swift.Error { ... } 
0

मैं एक AVCapture सत्र में इस ब्लॉक की कोशिश की और यह स्विफ्ट 3 + आईओएस से 10 में काम करता है एक NSError एक RawValue के रूप में उपयोग करते हुए संबोधित कर सकते हैं हामिश भविष्य में संदर्भ के ऊपर के बारे में त्रुटि के लिए क्या बात कर रहे थे।

enum Error : Swift.Error { 
    typealias RawValue = NSError 

    case failedToAddInput 
    case failedToAddOutput 
    case failedToSetVideoOrientation 
} 
संबंधित मुद्दे