SwiftUI @State/@ObservableObject/@EnvironmentObject のメモ

それぞれの違いなどをメモする。
間違いあるかもしれない。

@State

State - SwiftUI | Apple Developer Documentation

SwiftUI Framework に含まれる。

概要

@State の値が変更されると、ビューの表示は再計算される。
State からバインディングを取得するには binding プロパティか $ プレイフィックス演算子を使用する。($ を使用するパターンが多く見受けられる)

アクセス範囲

@State プロパティにアクセスするには、そのプロパティを持つビューのみ。(原理的にはそのビューの func を外部のビューが呼び出して、プロパティを変更する、はできる)

まとめ

有効範囲は小さく、ローカル。
@State は特定のビューに属する形のデータに使用する。
例えば、ビュー内のボタンを押して、表示を変更する、など。

@ObservableObject

ObservableObject - Combine | Apple Developer Documentation

Combine Framework に含まれる。

概要

複数のビューでデータを共有する場合は @State の代わりに @ObservableObject を使用する。

@State と似ているが、クラスのインスタンスを作成し、独自のプロパティを作成する必要がある。

監視対象オブジェクトがデータが変更されたことをビューに通知する方法はいくつかあるが、最も簡単なのは @Published プロパティラッパーを使用すること。@ObservableObject の変更はすベて自動で通知される。

アクセス範囲

複数ビューからアクセス可能。

まとめ

@State より有効範囲が広い。

例えば施設データがあり、それを List 表示する View とその先の詳細を表示する View がある場合などは施設データは @ObservableObject を使用すると良い。

@EnvironmentObject

https://developer.apple.com/documentation/swiftui/environmentobject

SwiftUI Framework に含まれる。

概要

@State が変更時にビュー更新を自動的に発生させる。
@ObservableObject が変更時にビューの更新を発生させる可能性がある。

@EnvironmentObject はすべてのビューが読み取り可能な、アプリ全体で使用できる共有データ。

まとめ

@State, @ObservableObject よりも有効範囲が広い。
アプリ全体で使用するデータに使用すると良い。

全体まとめ

有効範囲の広さ

@EnvironmentObject > @ObservableObject > @State

適切な使い道

  • @State
    • ひとつのビュー内の値変更と表示の変更
  • @ObservableObject
    • 複数のビュー内での共有するデータ(変更通知も可能)
  • @EnvironmentObject
    • アプリ全体で共有する値

参考

映画『ショーシャンクの空に』の感想

1994年 アメリ

原作 スティーヴン・キング
出演 ティム・ロビンズ、モーガン・フリーマン




スティーヴン・キング原作の映画は面白いものが多い。
たとえば以下。

スタンド・バイ・ミー

グリーンマイル

ミスト

ミスト (字幕版)

ミスト (字幕版)

ドリームキャッチャー

痩せゆく男

そして、この「ショーシャンクの空に」はキング原作の映画の中でも特に印象に残る。




この映画に描かれている人間と、アメリカの風景が好きだ。

映画のテーマは、おおざっぱに言うと、「人間の生き方」だと思う。

刑務所という粗暴で汚れた場所で、どう生きるか?

ティム・ロビンスが演じるアンディは、いままでは学歴があり知性ある人々のなかで落ち着いた生活をしていたが、冤罪で投獄され、荒い犯罪者とともに収監生活を送ることを余儀なくされた。

しかし、刑務所のなかでもアンディは「知性」や「文化」など人間的な暮らしを志向するため、高校を出ていない若い囚人に勉強を教えて高卒資格を取らせたり、ミニ図書館を作ったりする。

それにより、今まで粗暴だった刑務所内の空間が徐々に「人間らしい暮らし」ができる空間に変わっていく。

だが、品がよく学歴があり、周囲とちがうアンディは刑務所内で目立ち、騒動にもまきこまれる。悪い囚人たちに暴行、性的レイプされる日々。

また、銀行員の経歴から、刑務所の所長に強要されて、刑務所ぐるみの囚人の労働対価搾取ビジネスを手伝い、所長の隠し財産づくりに任される。

とことん、人間としての尊厳をアンディは奪われる。しかし、彼は静かに諦めずに脱獄作戦を継続し、ついに自由な世界へもどる。

ひどい環境でも人間のプライドを捨てずに、目標を成し遂げるアンディに共感し、感動する映画だ。




もうひとりの囚人の話もしよう。モーガン・フリーマン演じるレッドという囚人がいて、この映画の準主役だ。

三十代程度の若いアンディに対して、レッドは六十代程度を思わせる中年の囚人だ。

アンディが刑務所のなかで、ほかの囚人や看守と衝突するのと対照に、レッドは長いこと刑務所にいて「慣れて」おり、環境に適応し居場所をつくっていた。

実際、レッドが仮出所を望んでいない描写があることから、いわば刑務所の外の人生を「諦めた」人物として描かれている。

しかし、刑務所でアンディを助けたりと、悪意ある人間ではなく、心のどこかで、ひっそりと自由を求めいている。

だから、この映画を観た我々はまず素直に、人間の尊厳と自由を求めてもがくアンディに感情移入するが、現実に屈しいろいろと諦めて、現状を快適にしながらも良心を捨てずに生きるレッドにも感情移入する。

人間としての根底にある自由に対する生き方が、ふたつあり、どちらも理解でき感情移入できる。

だから、この映画は見終わったあと、極端な立場に立つことなく、バランスのよいさわやかな感想をもてるのだろう。

【SwiftUI】TextField で金額を入力する

NumberFomatter を TextField に設定して、以下の動作を確認

  • 米ドル、ユーロ、日本円入力のテスト
  • アルファベットなどの金額ではない入力は、キーボードを閉じたタイミングで消され、訂正される
  • 入力可能な金額の最高値
  • 入力可能な小数点以下の桁数


サンプルコードは以下。

Xcode で "Unable to boot the Simulator" が発生してシミュレータが起動しない

以下の Xcode が入っている環境(プロジェクトにより使用する Xcode のバージョンを切り替えしている)で

Xcode 11.2.1 のアップデートがあったのでこれを取り込んだ。

(これが原因かどうか分からないが)

その後 Xcode 10.1 の方のシミュレータが起動できなくなり、困った。
Xcode でアプリをシミュレータ実行しようとすると以下のエラーダイアログが表示される。

Unable to boot the Simulator.

この現象の解決に至った手順をメモする。

シミュレータのリセット

現在使用しているシミュレータをキレイにリセットしてみる。(シミュレータに保存されているデータも含め、シミュレータが全て削除されることに注意)

まずは xcode-select --print-pathXcode 10.1 の方が選択されているか、改めて確認。

次に、現在起動しているシミュレータをシャットダウンする。

$ xcrun simctl shutdown all

最後に、すべてのシミュレータを削除する。

$ xcrun simctl delete $(xcrun simctl list | grep -o '[0-9A-F]\{8\}-[0-9A-F]\{4\}-[0-9A-F]\{4\}-[0-9A-F]\{4\}-[0-9A-F]\{12\}' | xargs)
$ xcrun simctl delete unavailable

Xcode から選択できるシミュレータが一つもなくなったので、手動でシミュレータを追加して、アプリ実行を試してみる。
・・・しかし結果は変わらず、起動しなかった。

tmp フォルダの作りなおし

私の環境はこの対応をしたことでシミュレータが起動するようになった。
以下のコマンドで private/tmp を作りなおし。

$ sudo mkdir /private/tmp
$ sudo chmod 1777 /private/tmp

このあと、シミュレータ実行は無事成功した。

参考

所得税と復興特別所得税の計算

参考

所得税

所得税の税率は、分離課税に対するものなどを除くと、5%から45%の7段階に区分されています。 課税される所得金額(千円未満の端数金額を切り捨てた後の金額です。)に対する所得税の金額は、次の速算表を使用すると簡単に求められます。

課税される所得金額 税率 控除額
195万円以下 5% 0円
195万円を超え 330万円以下 10% 97,500円
330万円を超え 695万円以下 20% 427,500円
695万円を超え 900万円以下 23% 636,000円
900万円を超え 1,800万円以下 33% 1,536,000円
1,800万円を超え4,000万円以下 40% 2,796,000円
4,000万円超 45% 4,796,000円

所得税 = ( 課税所得 * 所得税の税率 ) - 所得税の控除額

復興特別所得税

平成25年から令和19年までの各年分の確定申告においては、所得税と復興特別所得税(原則としてその年分の基準所得税額の2.1%)を併せて申告・納付することとなります。

復興特別所得税 = 所得税 * 2.1%

計算例

課税所得が500万円の場合

572,500 = (5,000,000 * 0.2) - 427,500

復興特別所得税は 12,022円になる

12,022 = (572,500 * 0.021)

所得と所得控除

所得控除の一覧

  1. 給与所得控除(給与所得者のみが対象)
  2. 雑損控除
  3. 医療費控除
  4. 社会保険料控除
  5. 小規模企業共済等掛金控除
  6. 生命保険料控除
  7. 地震保険料控除
  8. 寄附金控除
  9. 障害者控除
  10. 寡婦控除・寡夫控除
  11. 勤労学生控除
  12. 配偶者控除
  13. 配偶者特別控除
  14. 扶養控除
  15. 基礎控除

1. 給与所得控除

No.1410 給与所得控除

給与所得にかかわる控除。 給与所得者は「給与所得控除」された給与所得に、これ以下の控除を適用する。

給与所得 = 給与収入 - 給与所得控除

平成29年分~令和元年分

給与等の収入金額(給与所得の源泉徴収票の支払金額) 給与所得控除額
1,800,000円以下 収入金額×40% 650,000円に満たない場合には650,000円
1,800,000円超 3,600,000円以下 収入金額×30%+180,000円
3,600,000円超 6,600,000円以下 収入金額×20%+540,000円
6,600,000円超 10,000,000円以下 収入金額×10%+1,200,000円
10,000,000円超 2,200,000円(上限)

令和2年分以降

給与等の収入金額(給与所得の源泉徴収票の支払金額) 給与所得控除額
1,800,000円以下 収入金額×40%-100,000円 550,000円に満たない場合には、550,000円
1,800,000円超 3,600,000円以下 収入金額×30%+80,000円
3,600,000円超 6,600,000円以下 収入金額×20%+440,000円
6,600,000円超 8,500,000円以下 収入金額×10%+1,100,000円
8,500,000円超 1,950,000円(上限)

2. 雑費控除

No.1110 災害や盗難などで資産に損害を受けたとき(雑損控除)

災害又は盗難若しくは横領によって、資産について損害を受けた場合等には、一定の金額の所得控除を受けることができます。これを雑損控除といいます。

控除の金額

次の二つのうちいずれか多い方の金額です。

  1. (差引損失額)-(総所得金額等)×10%
  2. (差引損失額のうち災害関連支出の金額)-5万円

認められる原因

次のいずれかの原因が対象(詐欺や恐喝は含まれない)

  1. 震災、風水害、冷害、雪害、落雷など自然現象の異変による災害
  2. 火災、火薬類の爆発など人為による異常な災害
  3. 害虫などの生物による異常な災害
  4. 盗難
  5. 横領

3. 医療費控除

No.1120 医療費を支払ったとき(医療費控除)

 その年の1月1日から12月31日までの間に自己又は自己と生計を一にする配偶者やその他の親族のために医療費を支払った場合において、その支払った医療費が一定額を超えるときは、その医療費の額を基に計算される金額(下記3参照)の所得控除を受けることができます。これを医療費控除といいます。

対象となる医療費

  1. 納税者が、自己又は自己と生計を一にする配偶者やその他の親族のために支払った医療費であること。
  2. その年の1月1日から12月31日までの間に支払った医療費であること(未払いの医療費は、現実に支払った年の医療費控除の対象となります。)。

控除の金額

控除の金額 = (実際に支払った医療費の合計額 - 保険金などで補てんされる金額) - 10万円

10万円の部分は、その年の「総所得金額等」が200万円未満の人は「「総所得金額等」の5%になります。

例)医療費20万円 保険金0円

控除の金額は10万円になる

10 = (20 - 0) - 10

例)医療費20万円 保険金5万円

控除の金額は5万円になる

5 = (20 - 5) - 10

例)医療費20万円 保険金0円 総所得金額等が100万円

控除の金額は15万円になる

15 = (20 - 0) - (100 * 0.05)

4. 社会保険料控除

No.1130 社会保険料控除

納税者が自己又は自己と生計を一にする配偶者やその他の親族の負担すべき社会保険料を支払った場合には、その支払った金額について所得控除を受けることができます。これを社会保険料控除といいます。  控除できる金額は、その年に実際に支払った金額又は給与や公的年金から差し引かれた金額の全額です。

5. 小規模企業共済等掛金控除

No.1135 小規模企業共済等掛金控除

納税者が小規模企業共済法に規定された共済契約に基づく掛金等を支払った場合には、その支払った金額について所得控除が受けられます。これを小規模企業共済等掛金控除といいます。

控除できる掛金は以下

  1. 小規模企業共済法の規定によって独立行政法人中小企業基盤整備機構と結んだ共済契約の掛金
  2. 確定拠出年金法に規定する企業型年金加入者掛金又は個人型年金加入者掛金(iDeCo
  3. 地方公共団体が実施する、いわゆる心身障害者扶養共済制度の掛金

6. 生命保険料控除

No.1140 生命保険料控除

納税者が生命保険料、介護医療保険料及び個人年金保険料を支払った場合には、一定の金額の所得控除を受けることができます。これを生命保険料控除といいます。

7. 地震保険料控除

No.1145 地震保険料控除

 納税者が特定の損害保険契約等に係る地震等損害部分の保険料又は掛金を支払った場合には、一定の金額の所得控除を受けることができます。これを地震保険料控除といいます。

地震」という名前が付いているが、実際は火災や自然災害などの損害保険も含む。
詳しくは以下のページを参照。

No.1146 地震保険料控除の対象となる保険契約

8. 寄附金控除

No.1150 一定の寄附金を支払ったとき(寄附金控除)

 納税者が国や地方公共団体特定公益増進法人などに対し、「特定寄附金」を支出した場合には、所得控除を受けることができます。これを寄附金控除といいます。なお、政治活動に関する寄附金、認定NPO法人等に対する寄附金及び公益社団法人等に対する寄附金のうち一定のものについては、所得控除に代えて、税額控除を選択することができます。

9. 障害者控除

No.1160 障害者控除

 納税者自身、同一生計配偶者(注)又は扶養親族が所得税法上の障害者に当てはまる場合には、一定の金額の所得控除を受けることができます。これを障害者控除といいます。  なお、障害者控除は、扶養控除の適用がない16歳未満の扶養親族を有する場合においても適用されます。

障害者控除の金額

区分 控除額
障害者 27万円
特別障害者 40万円
同居特別障害者 75万円

障害者控除の対象となる人の範囲

対象 区分
精神上の障害により事理を弁識する能力を欠く常況にある人 特別障害者
知的障害者 障害者
知的障害者(重度と判定された人) 特別障害者
精神障害者保健福祉手帳の交付を受けている人 障害者
精神障害者保健福祉手帳(1級)の交付を受けている人 特別障害者
身体障害者手帳の交付を受けている人 障害者
身体障害者手帳(1級・2級)の交付を受けている人 特別障害者
戦傷病者手帳の交付を受けている人 障害者
戦傷病者手帳の交付を受けている人(恩給法に定める特別項症から第3項症までの人) 特別障害者
原子爆弾被爆者に対する援護に関する法律の規定により厚生労働大臣の認定を受けている人 特別障害者
その年の12月31日の現況で引き続き6ヶ月以上にわたって身体の障害により寝たきりの状態で、複雑な介護を必要とする人 特別障害者

10. 寡婦控除・寡夫控除

No.1170 寡婦控除

 納税者自身が一般の寡婦であるときは、一定の金額の所得控除を受けることができます。これを寡婦控除といいます。

11. 勤労学生控除

No.1175 勤労学生控除

 納税者自身が勤労学生であるときは、一定の金額の所得控除を受けることができます。これを勤労学生控除といいます。

12. 配偶者控除

No.1191 配偶者控除

 納税者に所得税法上の控除対象配偶者がいる場合には、一定の金額の所得控除が受けられます。これを配偶者控除といいます。

配偶者特別控除」と似通っているが単純に区別すると

  1. 配偶者が働いていない(所得38万円以下)場合は「配偶者控除
  2. 配偶者が働いている(所得38万円を超える)場合は「配偶者特別控除

上記にある「38万円」は令和2年分以降は「48万円」になることに注意

控除対象配偶者となる人の範囲

平成30年分以後は、控除を受ける納税者本人の合計所得金額が1,000万円を超える場合は、配偶者控除は受けられません。

  1. 民法の規定による配偶者であること(内縁関係の人は該当しません。)。
  2. 納税者と生計を一にしていること。
  3. 年間の合計所得金額が38万円以下(令和2年分以降は48万円以下)であること。
    • (給与のみの場合は給与収入が103万円以下)
  4. 青色申告者の事業専従者としてその年を通じて一度も給与の支払を受けていないこと又は白色申告者の事業専従者でないこと。

13. 配偶者特別控除

No.1195 配偶者特別控除

 配偶者に38万円(令和2年分以降は48万円)を超える所得があるため配偶者控除の適用が受けられないときでも、配偶者の所得金額に応じて、一定の金額の所得控除が受けられる場合があります。これを配偶者特別控除といいます。  なお、配偶者特別控除は夫婦の間で互いに受けることはできません。

14. 扶養控除

No.1180 扶養控除

 納税者に所得税法上の控除対象扶養親族となる人がいる場合には、一定の金額の所得控除が受けられます。これを扶養控除といいます。

扶養親族に該当する人の範囲

  1. 配偶者以外の親族
  2. 納税者と生計を一にしている
  3. 年間の合計所得金額が38万円以下(令和2年分以降は48万円以下)であること。
    •  (給与のみの場合は給与収入が103万円以下)
  4. 青色申告者の事業専従者としてその年を通じて一度も給与の支払を受けていないこと又は白色申告者の事業専従者でないこと。

15. 基礎控除

確定申告や年末調整において所得税額の計算をする場合に、総所得金額などから差し引くことができる控除の一つに基礎控除があります。  基礎控除は、ほかの所得控除のように一定の要件に該当する場合に控除するというものではなく、一律に適用されます。

令和1年分までの基礎控除の額は38万円

令和2年分以降の基礎控除については以下。

個人の合計所得金額 控除額
2,400万円以下 48万円
2,400万円超2,450万円以下 32万円
2,450万円超2,500万円以下 16万円
2,500万円超 0円