半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

SwiftUIで使う $value はどのように実装されているのか

SwiftUIでState value を扱っているとき、 $value とすることで value のBindingを取得することができる。この $value がどういう実装になっているのかさっぱり不明だったので、調べた。

結論から言うと、Property Wrappersの projectedValue が機能している。Property Wrappersを作るとき、基本的には wrappedValue を使う。ここで projectedValue も定義しておくと、 $value としたときに特別な別の値を返却することができるという仕組みだ。

/// https://github.com/swiftlang/swift-evolution/blob/main/proposals/0258-property-wrappers.md#copy-on-write
protocol Copyable: AnyObject {
  func copy() -> Self
}

@propertyWrapper
struct CopyOnWrite<Value: Copyable> {
  init(wrappedValue: Value) {
    self.wrappedValue = wrappedValue
  }
  
  private(set) var wrappedValue: Value
  
  var projectedValue: Value {
    mutating get {
      if !isKnownUniquelyReferenced(&wrappedValue) {
        wrappedValue = wrappedValue.copy()
      }
      return wrappedValue
    }
    set {
      wrappedValue = newValue
    }
  }
}

このコードは、CopyOnWriteの実装をしている。何もしなければmutableな値になっているが、 $value とすることで変更可能な値を取り出せる。1

mutable/immutableの管理だったり、DBアクセスできる/できないの区別だったりがSwift Evolutionの中で触れられているが、うまく使えば面白いイディオムが作れる言語仕様だなと思った。普段はやらないが、明示的に実施させたい特別なアクションを表現するのに便利だと思う。

swift-evolution/proposals/0258-property-wrappers.md at main · swiftlang/swift-evolution · GitHub

おまけ

ちなみに、 $value という識別子はSwiftでは元々許可されていなく、LLDBのデバッグセッションで使われていた。ただ、このプロポーザルによって $value が使えるよう変更されたようだ。ただし、新しく値を作ることはできず、参照することができるだけ。

swift-evolution/proposals/0258-property-wrappers.md at main · swiftlang/swift-evolution · GitHub


  1. isKnownUniquelyReferenced は変数が1箇所からしか参照されていないかをチェックできる関数らしい。便利。

子供の医療費をマイナポータル連携する

重い腰を上げて確定申告をやっている。副業でやっているやつを確定申告する程度なので、レシート地獄でもなんでもないのでチャットやれば終わるのだが、まあこういうのは後回しにするものだ。

去年子供が産まれたので、子供の分の医療費控除もやれるわけだが、どうやらマイナポータル連携した上で代理人・委任者として登録しておけば、家族の医療費通知情報もマイナポータル経由で受け取れるらしい。ちゃんとしてるなー。

faq.myna.go.jp

しかし、うちの子はまだマイナンバーカードを作っていないのでこれができるのは来年。 12/2までに作れば乳児の顔写真付きマイナンバーカードが作れたんだが、まあバタバタしていてタイミングを逃してしまった。今は、1歳未満の乳児のマイナンバーカードには写真が不要である。 1歳になれば顔写真付きに戻るので、その時作るもありかな。逆に、顔写真なしのマイナンバーカードはある意味レアであるから、作っておいてもいいんだけど。

マイナンバーカードは、導入するときはあれこれ言われたが、普通に便利になっているし、いいんじゃないかなと個人的には思っている。

やさしさ

f:id:mactkg:20250310004752j:image

人から優しい人だよねと言われることがある。

一方で、本当に優しいわけではなくて、自分がよく見られたい、自分が大切なだけなのでは。と言われたので考えた。

 

たしかに、自分はよく見られたいという特性はあるのかもしれない。自分はかなり人目を気にして動くタイプで、相手に「正しさ」を強要したくはないけれど、自分自身「正しさ」みたいなものをよく意識してしまうタイプであると思う。なので、よく思われたい、と思って行動してしまう(行動できない)タイプだというのもある。

 

けれど、幼少期にグループに馴染めなかったりとか、孤独な思いや嫌な経験や理不尽な経験が優しさに繋がっているようにも思う。他人に自分が過去傷ついた経験をさせたくないから、なんらかの配慮をして動いているのではないかと思う。

逆にいうと、私が経験していないネガティブな経験は、誰かにさせてしまっている可能性が高いのかもしれない。

 

写真は、最近当たったGRⅢx HDFで試し撮りしたやつ。