2016-01-10 7 views
9

私はJavaの後すぐに勉強し始めました。 Javaでは、オブジェクト識別子に基づいてデフォルト値hashCodeequalsを持つため、任意のオブジェクトをHashSetのキーとして使用できます。スイフトで同じ行動を達成するには?Swift、オブジェクト参照に基づいてHashableプロトコルを実装する方法は?

+1

これはあなたが探しているものですか?http://stackoverflow.com/questions/30345700/reference-as-key-in-swift-dictionary? –

答えて

21

構造体ではなくクラスで作業している場合は、ObjectIdentifier構造体を使用できます。また、EquatableHashableが必要)に準拠するためには、クラスに==を定義する必要があります。これは次のようになります:

1

answerにすべてのクレジットがあります。再利用のための基本クラスにそれを回した、誰かを助けるかもしれない! openのような余分なものはすべて、再利用可能な基本フレームワークコンポーネントに入れることができます。

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) 
} 

使用するには、ちょうどあなたのクラスとサブクラスHashableClassを取り、その後、すべてがちょうど動作するはずです!

class MyClass: HashableClass { 

} 
関連する問題