我有布爾變數(isTapped),一旦應用程式啟動,我就給它一個真值,一旦它移動到(signupView),應用程式應該測驗 if 陳述句中的值以顯示一些文本,然后應用程式應該改變(isTapped) 的值為 false!
但它不作業!因為 Type() 無法確認查看。我試圖創建一個函式并在視圖中呼叫它,但它也不起作用!這是我的代碼:
import SwiftUI
struct SignupView: View {
@AppStorage("isTapped") var isTapped : Bool?
var body: some View {
if (isTapped == true){
Text ("signup")
isTapped = false
}
else {
Text ("Splash")
}
}
}
uj5u.com熱心網友回復:
您不能為視圖層次結構中的變數設定任何內容。所以為了實作你想做的事情,也許你可以試試這個:
var body: some View {
if (isTapped == true){
Text ("signup")
.onAppear {
isTapped = false
}
} else {
Text ("Splash")
}
}
onAppear閉包在視圖層次結構之外運行,因此您可以將值設定為變數。
**更新:回復:您的評論,這就是 SwiftUI 的作業方式。當isTapped = false設定為 時onAppear,SwiftUI 會立即重新加載 body 并顯示啟影片面。我認為要實作您所需要的,您不應該使用@AppStorage. 更新時將導致更新正文。你為什么不這樣使用UserDefaults?:
let isTapped: Bool? = UserDefaults.standard.bool(forKey: "isTapped")
...
Text ("signup")
.onAppear {
UserDefaults.standard.set(false, forKey: "username")
}
uj5u.com熱心網友回復:
如果你想Text("signup")在什么時候顯示isTapped為真,你需要額外的變數來保持原值
struct SignupView: View {
@AppStorage("isTapped") var isTapped : Bool = false
@State var isTappedOrigin: Bool = false
var body: some View {
Group {
if (isTappedOrigin == true){
Text ("signup")
} else {
Text ("Splash")
}
}.onAppear {
isTappedOrigin = isTapped
isTapped = false
}
}
}
你需要設定isTapped = true某個地方才能看到Text("signup")這樣
struct ContainView: View {
@AppStorage("isTapped") var isTapped : Bool = false
@State var show: Bool = false
var body: some View {
List {
Toggle("isTapped", isOn: $isTapped)
Button("show signup view") {
show.toggle()
}
}
.sheet(isPresented: $show) {
SignupView()
}
}
}
如果您只想signup在啟動應用程式時顯示一次,它應該是這樣的
struct TestView: View {
@AppStorage("isSignedUp") var isSignedUp : Bool = false
@State var shouldShowSignUp : Bool = false
var body: some View {
Group {
if shouldShowSignUp {
Text("Sign Up")
} else {
Text("Splash")
}
}.onAppear {
shouldShowSignUp = !isSignedUp
isSignedUp = true
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/438920.html
