काम नहीं कर रहा मैं बहुत की तरह प्रोटोकॉल एक्सटेंशन का उपयोग कर कुछ UITextFieldDelegate
के तरीकों पर एक डिफ़ॉल्ट व्यवहार को जोड़ने के लिए कोशिश कर रहा हूँ UITextFieldDelegate प्रोटोकॉल विस्तार:तेज 2.0 -
extension ViewController: UITextFieldDelegate {
// Works if I uncommented this so I know delegates are properly set
// func textFieldShouldReturn(textField: UITextField) -> Bool {
// textField.resignFirstResponder()
// return true
// }
}
extension UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
आप अनुमान लगा सकते हैं, कीबोर्ड कभी नहीं खारिज। मैं वास्तव में नहीं देख सकता कि यहां समस्या कहां है। क्या यह एक भाषा सीमा है? क्या किसी ने पहले से ही सफलता कर रही है?
संपादित करें:
रूप @Logan सुझाव दिया, डिफ़ॉल्ट प्रोटोकॉल की विधि कार्यान्वयन @objc
के रूप में चिह्नित प्रोटोकॉल के साथ काम नहीं करता। हालांकि, UITextFieldDelegate
निम्नलिखित हस्ताक्षर NSObjectProtocol
के लिए public protocol UITextFieldDelegate : NSObjectProtocol {...}
मैंने परीक्षण डिफ़ॉल्ट कार्यान्वयन है और यह ठीक काम करता है लगता है:
protocol Toto: NSObjectProtocol {
func randomInt() -> Int
}
extension Toto {
func randomInt() -> Int {
return 0
}
}
class Tata: NSObject, Toto {}
let int = Tata().randomInt() // returns 0
'UITextFieldDelegate' हस्ताक्षर 'सार्वजनिक प्रोटोकॉल UITextFieldDelegate: NSObjectProtocol {...}' जैसा दिखता है। मैंने प्रोटोकॉल के लिए प्रोटोकॉल एक्सटेंशन का परीक्षण किया है जो 'NSObjectProtocol' लागू करता है और यह समस्याग्रस्त नहीं लगता है। इसके अलावा, अगर मैं 'obj' प्रोटोकॉल का विस्तार करने की कोशिश करता हूं तो संकलक मुझे चेतावनी नहीं दे सकता है? – Yaman
@ यमन - हम सभी जानते हैं कि कंपाइलर चेतावनियां स्विफ्ट में और कभी-कभी इसके अस्पष्ट नहीं हैं। यदि आप कम से कम मेरे सिस्टम पर 'अनुरूप नहीं है' से परे देखते हैं, तो मुझे '@ objc' चेतावनी भी मिलती है जो '@ objc' जोड़ती रहती है लेकिन समस्या को कभी हल नहीं करती है। मुद्दा किसी ओबीजेसी प्रोटोकॉल को विस्तारित नहीं कर रहा है, किसी भी भ्रम के बारे में खेद है। मुद्दा डिफ़ॉल्ट व्यवहार बना रहा है जो ओबीजेसी पहुंच पर निर्भर है। एक ओबीजेसी प्रोटोकॉल में नई विधियों को विस्तार और जोड़ना जो स्विफ्ट में केवल पहुंच योग्य है ठीक है। डिफ़ॉल्ट कार्यान्वयन को जोड़ना जो ओबीजेसी सुलभ होना चाहिए, इस मुद्दे का कारण बनता है। – Logan
इन परिशुद्धता के लिए धन्यवाद। मैंने प्रोटोकॉल के लिए डिफ़ॉल्ट कार्यान्वयन का भी परीक्षण किया है जो 'NSObjectProtocol' को लागू करता है और यह भी काम करता है। क्या 'NSObjectProtocol' घोषित करना' @ objc' चिह्न के बराबर है? हो सकता है कि 'UITextFieldDelegate' प्रोटोकॉल को '@ objc' के रूप में चिह्नित किया गया हो लेकिन मेरा कस्टम प्रोटोकॉल जो 'NSObjectProtocol' को लागू करता है' नहीं है? – Yaman