Swiftのstructでstatic propertyを使うメリット

開発環境

$ swift --version
swift-driver version: 1.75.2 Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100)
Target: arm64-apple-macosx13.0

TL;DR

Q: Swiftのstructでstatic propertyを使うメリットは?
A: static propertyはインスタンスのメモリ領域に格納されないため、メモリ使用量の観点で経済的

struct Hoge {
    let a = 1
    static let b = 2
}

let hoge = Hoge()
MemoryLayout.size(ofValue: hoge)  // 8

// struct Hogeのインスタンスのメモリ使用量は、
// 定数a(Int == Int64)の8byte分のみ。  

モチベーション

きっかけはswift-evolutionの 0380-if-switch-expressions を読んでいた時だった。

github.com

Swiftの anysomeany が実行時に型が決まり、someコンパイル時に型が決まる、みたいな適当な理解だな〜

Swift 5.6のany、Swift 5.7のsomeと、Swiftらしいprotocolの使い方 - YouTube にたどり着く。

structのメモリ使用量を確認するために MemoryLayout.size(ofValue:) が使われることを知る。

developer.apple.com

そういえば、Swiftのstructでインスタンスごとの共通の値はstatic propertyで定義した方が良いよね、というのは感覚では分かるが、なぜそうなのかは MemoryLayout.size(ofValue:) を使ってインスタンスのメモリ使用量を見れば良いのでは。

おわりに

Swiftに関して知らないことが多い。対応としてswift-evolutionで興味のあるプロポーザルを読み進めている。今回みたいな気づきが得られて良かった。

知らないことが多くて先は長いなと少し落ち込んだが、少しずつでも理解の幅を広げていこう。

参考