2011-06-16 33 views
30

Yolların eşit olup olmadığını sınamak için eşit bir yöntem olup olmadığını sınamanın bir yolunu arıyorum. compare:'u denedim ama işe yaramaz gibi görünüyor, dizinler kesinlikle aynı olmasa bile, NSOrderedSame ile karşılaştırıldığında her zaman doğru olur.İki NSIndexPaths nasıl karşılaştırılır?

+1

Lütfen kodunuzu karşılaştırın: yöntemini kullanarak gönderin. – thomashw

+8

'[itemCategoryIndexPath karşılaştırması: indexPath] == NSOrderedSame 'oldukça düz ileri, ben smth eksikti? –

+0

@Valentin Radu, önceki yorumunuzda, şunu demek istiyorsun: 'karşılaştırmak:' sorularınız, bahsinizde bahsettiğinizin aksine? – Vasu

cevap

87

Neredeyse tüm Objective-C nesneleri isEqual: yöntemi kullanılarak karşılaştırılabilir. Yani, eşitliği test etmek için, sadece [itemCategoryIndexPath isEqual:indexPath]'a ihtiyacınız var ve gitmekte fayda var. Şimdi, bu NSObjectisEqual: uygular çünkü çalışır, bu nedenle, tüm nesneler otomatik olarak bu yönteme sahiptir, ancak belirli bir sınıf geçersiz kılmazsa, isEqual: yalnızca nesne işaretçileriyle karşılaştıracaktır.

NSIndexPath söz konusu olduğunda, isEqual: yöntemi geçersiz kılındığından, nesneleri beklediğiniz gibi karşılaştırabilirsiniz. Ancak yeni bir sınıf yazacak olsaydım, MyObject ve yöntemi geçersiz kılmazsa, [instanceOfMyObject isEqual:anotherInstanceOfMyObject] etkin olarak instanceOfMyObject == anotherInstanceOfMyObject ile aynı olurdu.


NSObject Protocol Reference'da daha fazlasını okuyabilirsiniz.

+1

'isEqual çalışır, teşekkürler! –

+0

@Itai Ferber, bir yöntem geçersiz kılınmış ya da edilmemişse, nasıl bilen var. – Vasu

+0

@Kailash Bir yöntemin geçersiz kılınmış olup olmadığını bilmeniz gerekmez. Bir yol olabileceğini düşünüyorum, ama emin değilim; Bu, günlük programlamanın alanı içinde değil - çalışma zamanı ile uğraşmak biraz zaman alacaktı. Neyse, çoğunlukla, bir sınıfın bu yöntemi geçersiz kılıp kılmadığını bilmesi için bir neden yoktur, çünkü size ihtiyacınız olan işlevselliği sağlar. Nesnelerde her zaman 'isEqual:' kullanın ve sınıfın sizin için sorunu çözmesine izin verin. –

8

Swift'de, NSIndexPaths'ın aynı olup olmadığını karşılaştırmak için == kullanın.

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" 

Swift, değer karşılaştırmaları için =='u kullanır. ===, iki değişkenin tam olarak aynı örneği (bellekte yer vb.) Referans aldığını tespit etmek için kullanılır. İlginç bir şekilde, indexPath1 === indexPath2, NSIndexPath değerlerini (bölüm satırı) eşleştiğinde aynı örneği paylaşmak için oluşturulduğunu gösterir, böylece örnekleri karşılaştırıyor olsanız bile, yine de geçerli olur.

Bu yanıt neredeyse tamamen this fantastic SO answer from drewag'dan alınmış ve burada 'index indexpath'ı karşılaştırmak için ilk Google sonucu olduğundan yeniden oluşturulmuştur ve biz sadece bir link yapıştırmamamız gerekiyor.

+1

Bu soru neredeyse 4 yaşında, objektif-c olarak etiketlendi ve kabul edilmiş bir cevabı var. Bunu ayrı bir soruya cevap olarak göndermenin daha iyi olacağını düşünüyorum. – sbooth

+3

Sadece benim gibi gelecekteki çaylaklara yardım etmeye çalışıyorum. Google'ın indexPath ile karşılaştırmasını yaptığınızda # 1 sonuç olur. Ayrı bir soru soracağım ve bu cevabı postalayacağım ama insanlar bunu ilk defa uzun zamandır bulacaktır. :) –

+1

Aslında cevabımda bahsettiğim gibi soru zaten sorulmuştu. http://stackoverflow.com/questions/25172525/comparing-nsindexpath-swift - Ancak 'indexpath swift'i karşılaştır' aradığınızda yerinde arama bile bu soruyu göstermiyor. Sadece bu cevabı gösteriyor. Bu yüzden burada insanları işaret etmek için cevabımı burada bırakacağım. –

İlgili konular