fileprivate var objects:[Int:AnyObject] = [:]
extension Hoge {
var appended: AnyObject? {
get {
return objects[hash]
}
set {
objects[hash] = newValue
}
}
}
AnyObject
のところは型が明確であるならそれで。
Stringのようなhash
が特別な値になるクラスでは使えません。
あと、後始末してないのでリークします。
デフォルト実装のhashは生成と削除の回数が多い場合コンフリクトしやすいので注意。
(デフォルト実装のhashはオブジェクトのアドレスを返してるだけです)
(後始末をしてないので以前使われた値が残っていればそれが使われます)
追記
使用上の注意
hash
プロパティは主に重い処理となりうるisEqual(_:)
を高速化するためのプロパティでその一意性は保証されていません。
そのため、別のインスタンスのhashが同じ値となることが往々にしてあります。
例えばStringはその文字列が同じであれば別のインスタンスであっても同じhashを持ちます。
hashが同じ値を持つインスタンスが存在する場合この実装は破たんします。
この実装を使う場合は、その点を十分理解の上お使いください。