前提・実現したいこと
swift初学者です.オブジェクト指向プログラミング自体もまだ理解し切れていません.
異なるswiftファイル間で変数を共有して動的に変更したく調べたのですが,自力で解決できませんでした.
実現したいことは+ボタンと-ボタンを配置して,+または-ボタンを押した時に画面上の数を増減させることです.
これ自体の実現は以下のコードでできています.
import SwiftUI class ShareNum: ObservableObject{ @Published var num: Int = 0 } struct ContentView: View { @ObservedObject var Num = ShareNum() var body: some View { VStack{ Text("(Num.num)") HStack{ Button(action: { self.Num.num += 1 }) { Image(systemName: "plus") .frame(width: 40, height: 40) .imageScale(.large) } .background(Color.blue) .foregroundColor(.black) Button(action: { self.Num.num -= 1 }) { Image(systemName: "minus") .frame(width: 40, height: 40) .imageScale(.large) } .background(Color.red) .foregroundColor(.black) } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
しかしながら,ボタンをそれぞれ別のファイルで実装した時に変数が共有されず,デバッグで確認したところ画面上の数字は動かずに,それぞれ独立して変化していました.
異なるファイル間で変数を共有し動的に変更できる方法がありましたら,必要な知識を教えていただけたら幸いです.
作成したソースコード
ContentView
1#ContentView.swift 2 3import SwiftUI 4 5struct ContentView: View { 6 @ObservedObject var Num = ShareNum() 7 var body: some View { 8 VStack{ 9 Text("(Num.num)") 10 HStack{ 11 button1() 12 button2() 13 } 14 } 15 } 16} 17 18struct ContentView_Previews: PreviewProvider { 19 static var previews: some View { 20 ContentView() 21 } 22} 23
button1
1#button1.swift 2 3import SwiftUI 4 5struct button1: View { 6 @ObservedObject var Num = ShareNum() 7 var body: some View { 8 Button(action: { 9 self.Num.PlusButton() 10 }) { 11 Image(systemName: "plus") 12 .frame(width: 40, height: 40) 13 .imageScale(.large) 14 } 15 .background(Color.blue) 16 .foregroundColor(.black) 17 } 18} 19 20struct button1_Previews: PreviewProvider { 21 static var previews: some View { 22 button1(Num: ShareNum()) 23 } 24} 25
button2
1#button2.swift 2 3import SwiftUI 4 5struct button2: View { 6 @ObservedObject var Num = ShareNum() 7 var body: some View { 8 Button(action: { 9 self.Num.MinusButton() 10 }) { 11 Image(systemName: "minus") 12 .frame(width: 40, height: 40) 13 .imageScale(.large) 14 } 15 .background(Color.red) 16 .foregroundColor(.black) 17 } 18} 19 20struct button2_Previews: PreviewProvider { 21 static var previews: some View { 22 button2(Num: ShareNum()) 23 } 24}
Share
1class ShareNum: ObservableObject{ 2 @Published var num: Int = 3 3 func PlusButton(){ 4 self.num += 1 5 print(self.num) 6 } 7 func MinusButton(){ 8 self.num -= 1 9 print(self.num) 10 } 11}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/08 05:07 編集
2020/05/08 05:29
2020/05/08 06:36