株式会社スタイリィでは一緒に働く仲間を募集しています
[Swift] オブジェクトの弱参照をコレクションで保持する
スタイリィにてモバイルアプリ開発・サーバサイド開発・力仕事など諸々やっている河田です。
これから技術ブログを書いていきます。
とはいえ、「技術ブログ」またはそれに類するものを書くのは三十余年の人生でこれが初めてなので、
当分の間は慣熟運転ということ(詰めの甘い文章が続く)になると思います・・・。
初回は超軽いネタをということで、弊社アプリのソースコードから引っ張ってきました。
struct WeakBox<T: AnyObject> {
weak var object: T?
}
オブジェクトの弱参照を1つ持つだけの、なんてことのないstructです。
当然単体では特に面白いことはないので、コレクション(配列とか辞書とか)の中身として使います。
var headers: [WeakBox<Header>] = []
var pics: [Int:WeakBox<Picture>] = [:]
もちろん(?)、Appleは「弱参照をコレクションで保持する」ための手段を提供しています(さっき知った):
https://developer.apple.com/documentation/foundation/nspointerarray/1412795-weakobjectspointerarray
ただし、これは
- 「配列」である → 他のコレクションを使いたい時に困る
- 中身の形情報が見えない → 上と合わせてジェネリクスに組み込みにくい
などの理由により、Swiftのコード内で使うのはちょっと気が進みません。
ということで、我々のプロジェクトでは上記WeakBoxが絶賛小活躍中です。
おしまい。