Java'dan sonra hızlı bir şekilde öğrenmeye başladım. Java'da herhangi bir nesneyi HashSet için bir anahtar olarak kullanabilirim, bu nedenle nesne tanımlayıcısına bağlı olarak varsayılan hashCode
ve equals
vardır. Swift'de aynı davranış nasıl elde edilir?Swift, nesne referansına dayalı Hashable protokolü nasıl uygulanır?
9
A
cevap
21
Sınıflarla ve yapılarla çalışmıyorsanız, ObjectIdentifier
yapısını kullanabilirsiniz. Ayrıca, Equatable
(Hashable
gerektiriyorsa) için sınıfınız için ==
tanımlamanız gerektiğini unutmayın. Böyle bir şey olacaktır:
class MyClass: Hashable { }
func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}
class MyClass: Hashable {
var hashValue: Int {
return ObjectIdentifier(self).hashValue
}
}
1
Tüm kredi answer için. Yeniden kullanılabilirlik için bir temel sınıfa dönüştürüldü, birine yardım edebilir! open
gibi tüm ekstra şeyler, bunu yeniden kullanılabilir bir temel çerçeve bileşenine koyabilirsiniz.
open class HashableClass {
public init() {}
}
// MARK: - <Hashable>
extension HashableClass: Hashable {
public var hashValue: Int {
return ObjectIdentifier(self).hashValue
}
}
// MARK: - <Equatable>
extension HashableClass: Equatable {}
public func ==(lhs: HashableClass, rhs: HashableClass) -> Bool {
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}
sadece sınıf ve alt sınıf HashableClass
almak, kullanmak için, sonra her şey sadece çalışmalı!
class MyClass: HashableClass {
}
İlgili konular
- 1. Swift protokolü devralma + delegeler
- 2. ObjC protokolü Swift uygulamasında
- 3. Swift - BTLE - CBCentralManagerDelegate Protokolü Nasıl Eklenir
- 4. Akka Streams kullanarak basit bir TCP protokolü nasıl uygulanır?
- 5. Swift sınıfına Objective c protokolü. Tanınmayan yöntem
- 6. Statik Üye Protokolü Metatype Swift üzerinde kullanılamaz
- 7. Swift: farklı nesne örnekleri
- 8. Mscorlib referansına meraklı
- 9. Uzun süren, olaya dayalı bir python programı nasıl uygulanır?
- 10. Objective-C Protokolü Madness - protokole dayanarak nesne nasıl döndürülür?
- 11. Nesne için Swift İşlev C
- 12. Swift Genel Nesne/JSON Serileştirme
- 13. Neden Swift'in Karakter tipi Hashable değil mi?
- 14. Swift protokolü uzantısı init ile kendi kendine referans sorunları
- 15. Swift (IOS) kullanarak sürüklenebilir bir MKPointAnnotation nasıl uygulanır?
- 16. Swift - Nesne/madde/Bu kodu vardır NSArray
- 17. Kendo UI bir CSS referansına sahip mi?
- 18. Java'da icy protokolü nasıl okunur?
- 19. RedirectToAction kullanırken protokolü nasıl ayarlayabilirim?
- 20. protokolü Ecto.Queryable
- 21. GKLocalPlayerListener protokolü
- 22. test protokolü uygunluk
- 23. WSSE SOAP Header'ı Web Referansına ekle
- 24. numpy.cov() işlevi nasıl uygulanır?
- 25. Nesne-C Çerçeve (CocoaPod) Swift içine alma?
- 26. Swift 2.0 içindeki yazdırma (Nesne) görüntülerini değiştirme
- 27. Java'da polimorfizm nasıl uygulanır?
- 28. Xcode'ta protokol yöntemleri nasıl otomatik olarak uygulanır?
- 29. Swift
- 30. Swift
http://stackoverflow.com/questions/30345700/reference-as-key-in-swift-dictionary? –