【Swift】プロパティラッパ(Property Wrapper)で UserDefaults へのアクセスを簡単にする【Xcode】

iOS エンジニアなら一度は使ったことがあるであろう UserDefaults。

今まで私は以下のようなクラスを作って、UserDefaultsからデータを取り出したり格納したりしていました。

こんなふうに、UserDefaults で管理したいデータごとにプロパティを作成していました。

このプロパティは計算型プロパティ(Computed property)として、ゲッターとセッター内で UserDefaults に対する操作を行っています。

ですがこのやり方だと、プロパティが増えるに伴って、同じような「get」「set」という構文が並ぶことになり、非常に冗長になってしまいます。いわゆるボイラープレートですね。

Swift 5.1 から導入された Property Wrapper を使うことで、もう少しスマートに実装することができるようになります。

本記事では、私が最近使用している UserDefaults のラッパーを備忘録として残しておきます。

Property Wrapper とは

Property Wrapper を簡単に説明すると、以下のような感じになると思います。

「プロパティがどのように値を返却するか、どのように初期値を決定するか、値がnilだった場合のデフォルト値はどうするか?といったプロパティの性質をあらかじめ定義しておき、その定義を任意のプロパティ に適用することができる」

Property Wrapper の詳細は以下の Proposal に載っています。

https://github.com/apple/swift-evolution/blob/master/proposals/0258-property-wrappers.md

Property Wrapper を使用して UserDefaults へのアクセスをラップする

基本的には以下のサイトをベースにさせていただいています。

https://swiftsenpai.com/swift/create-the-perfect-userdefaults-wrapper-using-property-wrapper/

実際に UserDefaults に値を格納するためのコードは以下のような感じです。

スポンサードリンク