実現したいこと
@stateについて実際に使ってみて、外部からアクセスできないことを確認してみたい。
発生している問題・分からないこと
SwiftUI初心者です。
エラーが出ているわけではありませんが、プロパティラッパーである@Stateについての挙動がよくわかっていません。
サイトなどで@Stateを定義すると、「そのプロパティへのアクセスは宣言されたView内でのみとなる。」とあったので実際にアクセスできないか確認してみるコードを記述してみました。
外部からアクセスする「Outside」といった構造体を書いて、実行してみたのですが、以下の写真のようにアクセスできたように見られます。
該当のソースコード
Swift
1import SwiftUI 2 3struct ContentView: View { 4 5 @State var isStateEnabled : Bool = false 6 7 8 var body: some View { 9 VStack { 10 HStack{ 11 Text(isStateEnabled ? "有効" : "無効") 12 .padding() 13 Toggle("", isOn: $isStateEnabled) 14 .padding() 15 // onchangeモディファイアのofの引数には監視対象となるプロパティを記入する 16 .onChange(of: isStateEnabled){ 17 print("isStateEnabledの状態:\(isStateEnabled)") 18 Outside().testAccess() 19 } 20 } 21 } 22 } 23} 24 25struct Outside { 26 func testAccess() { 27 let view = ContentView() 28 print(view.isStateEnabled) 29 } 30// } 31 32} 33 34#Preview { 35 ContentView() 36} 37 38 39
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
@stateの後に「private」をつけるとアクセスできないといったエラーが生じました。
error
1'isStateEnabled' is inaccessible due to 'private' protection level
@stateのみの記述だとプロパティーを監視するだけでどこからでもアクセスできてしまうのでしょうか?
それとも上記に挙げた写真から、トグルボタンを押すとView内の変数の更新が確認できたのですが、外部から接続確認するために記述した、Outsideの構造体の中の関数の変数は「false」のままで更新されていないことがわかります。
更新されていない = アクセスできていないと考えるべきでしょうか?
この@stateについてわかりやすく教えていただけたら幸いです。
よろしくおねがいします。
補足
Xcode 15.4

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/05/21 02:13