स्विफ्ट के साथ .KindOfClass का उपयोग कर रहा है


231

मैं स्विफ्ट लैंग का एक सा लेने की कोशिश कर रहा हूं और सोच रहा हूं कि निम्नलिखित ऑब्जेक्ट-सी को स्विफ्ट में कैसे बदला जाए:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];

    UITouch *touch = [touches anyObject];

    if ([touch.view isKindOfClass: UIPickerView.class]) {
      //your touch was in a uipickerview ... do whatever you have to do
    }
}

अधिक विशेष रूप से मुझे यह जानना होगा कि isKindOfClassनए सिंटैक्स में कैसे उपयोग किया जाए।

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

    ???

    if ??? {
        // your touch was in a uipickerview ...

    }
}

जवाबों:


480

उचित स्विफ्ट ऑपरेटर है is:

if touch.view is UIPickerView {
    // touch.view is of type UIPickerView
}

बेशक, अगर आपको भी एक नया कंटेंट देखने की जरूरत है, तो if let ... as? ...सिंटेक्स आपका लड़का है, जैसा कि केविन ने उल्लेख किया है। लेकिन अगर आपको मूल्य की आवश्यकता नहीं है और केवल प्रकार की जांच करने की आवश्यकता है, तो आपको isऑपरेटर का उपयोग करना चाहिए ।


2
स्विफ्ट 3 के साथ भी काम करता है!
footyapps27

स्विफ्ट 4.2 के साथ भी काम करता है!
रवि

कई अलग-अलग वर्ग प्रकारों की जांच करने के लिए आप स्विच स्टेटमेंट में ऐसा कैसे कर सकते हैं?
बिगबॉय 1337

132
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

    super.touchesBegan(touches, withEvent: event)
    let touch : UITouch = touches.anyObject() as UITouch

    if touch.view.isKindOfClass(UIPickerView)
    {

    }
}

संपादित करें

जैसा कि @ केविन के जवाब में बताया गया है , सही तरीका वैकल्पिक प्रकार के कास्ट ऑपरेटर का उपयोग करना होगा as?। आप अनुभाग पर इसके बारे में अधिक पढ़ सकते हैंOptional Chaining उप अनुभागDowncasting

संपादित करें २

जैसा कि उपयोगकर्ता @KPM द्वारा अन्य उत्तर पर कहा गया है , isऑपरेटर का उपयोग करना सही तरीका है।


सुपर में भूल गए। आप इसे : UITouchइस एक में भी निकाल सकते हैं , क्योंकि प्रकार के अनुमान से पता चल जाएगा कि यह as UITouchकलाकारों द्वारा क्या है
मैल्कम जार्विस

@MalcolmJarvis को इससे कोई दुख नहीं है।
रुई पेरेस

4
अन्य उपयोगकर्ताओं के प्रतिनिधि को आपके जवाब को आपके द्वारा चोरी करने से खराब स्वाद में है।
devios1

काम नहीं करता है। सूझता है UIPickerView.self। क्या यह सही है?
व्याचास्लाव गेरिकोव

49

आप चेक को जोड़ सकते हैं और एक बयान में डाल सकते हैं:

let touch = object.anyObject() as UITouch
if let picker = touch.view as? UIPickerView {
    ...
}

तब आप ब्लॉक के pickerभीतर उपयोग कर सकते हैं if


3
यह "अधिक सही" उत्तर है क्योंकि यह स्विफ्ट का उपयोग करता है? ' ऑपरेटर। दस्तावेज़ में कहा गया है कि "ऑब्जेक्टिव-सी में, आप isKindOfClass का उपयोग करते हैं: यह जांचने के लिए कि कोई ऑब्जेक्ट किसी निश्चित वर्ग प्रकार का है या नहीं, और यह पुष्टि करता है कि क्या कोई ऑब्जेक्ट किसी प्रोटोकॉल के अनुरूप है या नहीं, यह जांचने के लिए विधि: Swift में, आप इसे पूरा करते हैं। किसी प्रकार की जांच करने के लिए ऑपरेटर है, या उस प्रकार को डाउनकास्ट करने के लिए ऑपरेटर का उपयोग करके कार्य। " Apple प्रलेखन
एडम फॉक्स

यह प्रदर्शन का सही तरीका है। KingOfClass स्विफ्ट में। आप केवल तभी ब्लॉक करेंगे जब ऑब्जेक्ट UIPickerView का होगा! बहुत बढ़िया जवाब!
फ्लोरियन ब्यूरेल

केवल यह इंगित करना चाहता था कि यदि आपको केवल चेक करने की आवश्यकता है और बाद के 'यदि' ब्लॉक में 'पिकर' का उपयोग करने की आवश्यकता नहीं है, तो आप उपयोग करना चाहेंगे: if _ = स्पर्श करें। UIPickerView {...}
एडम फ्रीमैन

उस मामले में @AdamFreeman आप बेहतर उपयोग करेंगेif touch.view is UIPickerView {...}
केविन

और मुझे यकीन है या तो नहीं कर रहा हूँ isया _बिंदु यह प्रश्न पूछा गया था, भाषा के बाद कुछ ही दिनों पहले घोषणा की गई थी पर मौजूद था।
केविन

1

मै इस्तेमाल करूंगा:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

    super.touchesBegan(touches, withEvent: event)
    let touch : UITouch = touches.anyObject() as UITouch

    if let touchView = touch.view as? UIPickerView
    {

    }
}

-3

नए स्विफ्ट 2 सिंटैक्स का उपयोग करने वाला एक और तरीका गार्ड का उपयोग करना है और यह सभी को एक सशर्त में घोंसला बनाना है।

guard let touch = object.AnyObject() as? UITouch, let picker = touch.view as? UIPickerView else {
    return //Do Nothing
}
//Do something with picker
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.