2011-06-16 23 views
30

मैं परीक्षण करने के लिए एक तरीका ढूंढ रहा हूं कि सूचकांक पथ बराबर हैं, और बराबर से मेरा मतलब प्रत्येक स्तर के बराबर है? मैंने compare: की कोशिश की लेकिन ऐसा लगता है कि काम नहीं करना है, NSOrderedSame की तुलना में मैं हमेशा सच हो जाता हूं, भले ही इंडेक्स निश्चित रूप से समान न हों।दो NSIndexPaths की तुलना कैसे करें?

+1

कृपया तुलना करके अपना कोड पोस्ट करें: विधि। – thomashw

+8

'[itemCategoryIndexPath तुलना करें: indexPath] == NSOrderedSame' बहुत सीधे आगे, क्या मुझे smth याद आ रही थी? –

+0

@ वेलेंटीन राडू, आपकी पिछली टिप्पणी में, क्या आपका मतलब है कि 'तुलना करें:' काम करता है, जैसा कि आपने अपने प्रश्न में उल्लेख किया है? – Vasu

उत्तर

87

लगभग सभी उद्देश्य-सी वस्तुओं की तुलना isEqual: विधि का उपयोग करके की जा सकती है। तो, समानता का परीक्षण करने के लिए, आपको केवल [itemCategoryIndexPath isEqual:indexPath] की आवश्यकता है, और आप जाने के लिए अच्छे हैं। अब, यह काम करता है क्योंकि NSObjectisEqual: लागू करता है, इसलिए सभी ऑब्जेक्ट्स में स्वचालित रूप से वह विधि होती है, लेकिन यदि कोई निश्चित वर्ग इसे ओवरराइड नहीं करता है, तो isEqual: ऑब्जेक्ट पॉइंटर्स की तुलना करेगा।

NSIndexPath के मामले में, isEqual: विधि को ओवरराइड कर दिया गया है, इसलिए आप उन वस्तुओं की तुलना कर सकते हैं जिनकी आप अपेक्षा कर रहे थे। लेकिन अगर मैं एक नई कक्षा, MyObject लिखना चाहता था और विधि को ओवरराइड नहीं करता था, [instanceOfMyObject isEqual:anotherInstanceOfMyObject] प्रभावी रूप से instanceOfMyObject == anotherInstanceOfMyObject जैसा ही होगा।


आप NSObject Protocol Reference में और अधिक पढ़ सकते हैं।

+1

'isEqual' काम करता है, धन्यवाद! –

+0

@ इटाई फेबर, अगर कोई विधि ओवरराइड हो या नहीं, तो कोई कैसे जान सकता है। – Vasu

+0

@ कैलाश आप जरूरी नहीं जान सकते कि कोई विधि ओवरराइड हो गई है या नहीं। मुझे लगता है कि एक रास्ता हो सकता है, लेकिन मुझे यकीन नहीं है; यह हर रोज प्रोग्रामिंग के दायरे में नहीं है - यह रनटाइम के साथ कुछ गड़बड़ कर लेगा। वैसे भी, अधिकांश भाग के लिए, यह जानने की आवश्यकता नहीं होगी कि कोई वर्ग इस विधि को ओवरराइड करता है, क्योंकि यह आपको आवश्यक कार्यक्षमता प्रदान कर रहा है। ऑब्जेक्ट्स पर हमेशा 'isEqual:' का उपयोग करें, और कक्षा को स्वयं के लिए समस्या को संभालने दें। –

8

स्विफ्ट में आप == का उपयोग करने के लिए तुलना करते हैं यदि NSIndexPaths समान हैं।

import UIKit 

var indexPath1 = NSIndexPath(forRow: 1, inSection: 0) 
var indexPath2 = NSIndexPath(forRow: 1, inSection: 0) 
var indexPath3 = NSIndexPath(forRow: 2, inSection: 0) 
var indexPath4 = indexPath1 

println(indexPath1 == indexPath2) // prints "true" 
println(indexPath1 == indexPath3) // prints "false" 
println(indexPath1 == indexPath4) // prints "true" 

println(indexPath1 === indexPath2) // prints "true" 
println(indexPath1 === indexPath3) // prints "false" 
println(indexPath1 === indexPath4) // prints "true" 

स्विफ्ट मूल्य तुलना के लिए == का उपयोग करता है। === का उपयोग यह पता लगाने के लिए किया जाता है कि दो चर सही सटीक उदाहरण (स्मृति आदि में स्थान) का संदर्भ देते हैं। दिलचस्प बात यह है कि indexPath1 === indexPath2 दिखाता है कि जब भी मान (सेक्शन पंक्ति) मिलान होता है, तो उसी इंस्टेंस को साझा करने के लिए NSIndexPath बनाया गया है, भले ही आप उदाहरणों की तुलना कर रहे हों, फिर भी यह मान्य होगा।

यह उत्तर लगभग this fantastic SO answer from drewag से लगभग पूरी तरह से लिया गया और यहां पुन: प्रस्तुत किया गया क्योंकि यह 'इंडेक्सपाथ की तुलना करें' के लिए पहला Google परिणाम है और हमें केवल एक लिंक पेस्ट नहीं करना चाहिए।

+1

यह प्रश्न लगभग 4 साल पुराना है, जिसे उद्देश्य-सी टैग किया गया है, और इसका एक स्वीकार्य उत्तर है। मुझे लगता है कि इसे एक अलग प्रश्न के उत्तर के रूप में पोस्ट करना बेहतर होगा। – sbooth

+3

बस मेरे जैसे भावी रूकीज़ की मदद करने की कोशिश कर रहा है। यह # 1 परिणाम है जब आप Google 'indexPath की तुलना करें'। मैं एक अलग सवाल पूछूंगा और इस उत्तर को पोस्ट करूंगा लेकिन लोग इसे लंबे समय तक ढूंढ पाएंगे। :) –

+1

वास्तव में सवाल पहले से ही पूछा गया था, जैसा कि मैंने अपने उत्तर में उल्लेख किया था। http://stackoverflow.com/questions/25172525/comparing-nsindexpath-swift - लेकिन जब भी आप 'इंडेक्सपाथ स्विफ्ट की तुलना करें' की खोज करते हैं तो ऑनसाइट खोज उस प्रश्न को तब तक नहीं दिखाती है। यह सिर्फ यह जवाब दिखाता है। तो मैं वहां लोगों को इंगित करने के लिए यहां अपना उत्तर छोड़ने जा रहा हूं। –

संबंधित मुद्दे