実現したいこと
@stateについて実際に使ってみて、外部からアクセスできないことを確認してみたい。
発生している問題・分からないこと
SwiftUI初心者です。
エラーが出ているわけではありませんが、プロパティラッパーである@Stateについての挙動がよくわかっていません。
サイトなどで@Stateを定義すると、「そのプロパティへのアクセスは宣言されたView内でのみとなる。」とあったので実際にアクセスできないか確認してみるコードを記述してみました。
外部からアクセスする「Outside」といった構造体を書いて、実行してみたのですが、以下の写真のようにアクセスできたように見られます。
該当のソースコード
Swift
1import SwiftUI2 3struct ContentView: View {4 5 @State var isStateEnabled : Bool = false6 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
特になし
試したこと・調べたこと
上記の詳細・結果
@stateの後に「private」をつけるとアクセスできないといったエラーが生じました。
error
1'isStateEnabled' is inaccessible due to 'private' protection level
@stateのみの記述だとプロパティーを監視するだけでどこからでもアクセスできてしまうのでしょうか?
それとも上記に挙げた写真から、トグルボタンを押すとView内の変数の更新が確認できたのですが、外部から接続確認するために記述した、Outsideの構造体の中の関数の変数は「false」のままで更新されていないことがわかります。
更新されていない = アクセスできていないと考えるべきでしょうか?
この@stateについてわかりやすく教えていただけたら幸いです。
よろしくおねがいします。
補足
Xcode 15.4
0 コメント