LoginSignup
1
0

More than 5 years have passed since last update.

extensionでストアドプロパティもどきを追加する(リーク付き)

Last updated at Posted at 2016-12-21
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が同じ値を持つインスタンスが存在する場合この実装は破たんします

この実装を使う場合は、その点を十分理解の上お使いください。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0