2016-09-11 15 views
11

स्विफ्ट 3 में माइग्रेट करने का प्रयास करते समय (एक परियोजना में जिसमें लगभग आधा/आधा स्विफ्ट/ऑब्जेक्ट-सी कोड होता है), मुझे एक समस्या का सामना करना पड़ रहा है। हम इस तरह उद्देश्य-सी में इस विशिष्ट प्रोटोकॉल की घोषणा:स्विफ्ट 3 रूपांतरण त्रुटि/एनएसईआरआर

public protocol AProtocolDeclaration : NSObjectProtocol { 

    public func someEventHappened(_ error: Error?) 
}  

और जब कोई concrete class (in swift) में प्रोटोकॉल को लागू करने और परिभाषित करने के लिए कोशिश कर रहा है:

@protocol AProtocolDeclaration <NSObject> 

- (void)someEventHappened:(nullable NSError *)error; 

@end 

स्विफ्ट संकलक ऊपर प्रोटोकॉल घोषणा के लिए निम्नलिखित उत्पन्न करता है जेनरेट की गई विधि, मुझे कुछ ऐसा त्रुटि मिल रही है जैसे: Error to NSError परिवर्तित नहीं कर सकता। मुझे यकीन नहीं है कि इस त्रुटि को कैसे ठीक किया जाए। क्या कोई सुझाव दे सकता है?

+0

यहाँ एक नज़र [ ] (https://github.com/apple/swift-evolution/blob/master/proposals/0112-nserror-bridging.md) – Carpsen90

+1

कृपया अधिक विशिष्ट हो। क्या आपकी त्रुटि "त्रुटि को NSError में परिवर्तित नहीं कर सकती" रनटाइम त्रुटि या संकलन समय त्रुटि? बेशक इस मुद्दे को हल करने के लिए कोड की आवश्यकता है। और "कुछ ऐसा" चीज़ न देखें। कंसोल पर सटीक त्रुटि संदेश की प्रतिलिपि बनाएँ। – OOPer

उत्तर

0

मुझे लगता है कि इस Xcode 8.1 के रूप में Xcode 8. में SourceKit साथ एक बग और 8.2 बीटा 2 था, प्रोटोकॉल कार्य शामिल NSError मापदंडों Error के रूप में स्विफ्ट से 3 सही ढंग से पाट रहे हैं:

extension MyClass: AProtocolDeclaration { 
    func someEventHappened(_ error: Error?) { 
     print(error ?? "none") 
    } 
} 
+0

हां, यह निश्चित रूप से एक्सकोड में और नए एक्सकोड के साथ एक बग था, यह ठीक काम कर रहा है। – Anand