我添加了一個Array sum(),我把在A1()這個View裡面加數值進去sum(),但點進b1()後,b1()讀到的Array 仍然只有第一個位置而已。請問這個要怎麼解決?
另外想詢問 假設今天 我有這樣一個程式 裡面包含添加今日成績,當我輸入一個成績,就存在Array裡,Array每多一個數值,在我的secondView裡的list就多一個Text方塊(顯示今輸入過的成績,一個個顯示下來)。這樣要如何做到這樣的效果呢?因為我目前學的都是要先設定好Text。
先感謝各位大大!
小弟菜雞,解答
import SwiftUI
@main
struct IThelp_01App: App {
@StateObject var userInput = UserInput() //更動
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(userInput) //更動
}
}
}
import SwiftUI
struct a1: View {
var a = [100,200]
@State var karl = 0
@State var karlusum = 0
@EnvironmentObject var input : UserInput //更動
var body: some View {
Picker(selection:$karl, label: Text("請輸入熱量")) {
Text("100").tag(0)
Text("200").tag(1)
}
Button(action:{
karlusum = 0
karlusum = a[karl]
input.sum.append(karlusum)
print(input.sum)
}, label: {
Text("確認")
})
}
}
struct a1_Previews: PreviewProvider {
static var previews: some View {
a1()
.environmentObject(UserInput()) //更動
}
}
class UserInput: ObservableObject {
@Published var sum = [1]
}
struct b1: View {
@EnvironmentObject var input : UserInput //更動
var body: some View {
VStack{
Text("\(input.sum[2])")
//這個應該是你問題的解答
ForEach(input.sum, id: \.self) { i in
Text("\(i)")
}
}
}
}
struct b1_Previews: PreviewProvider {
static var previews: some View {
b1()
.environmentObject(UserInput()) //更動
}
}
之前看 https://youtu.be/vL0w3kvng0o 都沒看動
被留言講一下小開竅
感謝您的解答~ 可惜早就解決了~ 我後來是使用 Passing data via @ObservedObject and @StateObject 完成的! 有興趣的話可以參考這裡文章