我無法訪問使用開關。我想如果開關打開,它應該出現一個文本欄位,如果它關閉,變數的值應該為零。誰能幫我這個。我嘗試使用兩種不同的方法。一種使用 .Onchange,一種不使用 .Onchange。當我使用 .Onchange 時,它??會出現文本欄位的結果未被使用的減弱。當我不使用 .onAppear 時,它不接受 (userSettings.load = 0) 但文本欄位可以正常作業。我不明白我在這里做錯了什么。變數定義為:
struct TwoView: View {
@EnvironmentObject var userSettings: UserSettings
@State var load: Bool = false
var body: some View {
NavigationView {
VStack {
Form {
Toggle("Casual loading", isOn: $load)
.onChange(of: load) { value in
if load == false
{
userSettings.loadrate = 0
}
else
{
TextField("Casual Loading", value: $userSettings.loadrate, format: .number)
}
}
}
}
}
}
}
class UserSettings: ObservableObject
{
@Published var loadrate = Float()
}
uj5u.com熱心網友回復:
現在,您在TextField視圖層次結構之外使用,并且只是在onChange. 事實上,正如您所提到的,Xcode 正在向您發出警告,說明它未使用。
為了解決這個問題,您可以if在層次結構本身中使用一個子句:
struct ContentView : View {
var body: some View {
TwoView().environmentObject(UserSettings())
}
}
struct TwoView: View {
@EnvironmentObject var userSettings: UserSettings
@State var load: Bool = false
var body: some View {
NavigationView {
VStack {
Form {
Toggle("Casual loading", isOn: $load)
.onChange(of: load) { value in
//only imperative, non-View hierarchy code should go in this block
if load == false
{
userSettings.loadrate = 0
}
}
if load { //<-- Here
TextField("Casual Loading", value: $userSettings.loadrate, format: .number)
}
}
}
}
}
}
class UserSettings: ObservableObject
{
@Published var loadrate = Float()
}
uj5u.com熱心網友回復:
TextField 是一個視圖元素,它不應該在閉包內。它應該是一個視圖的孩子。同樣,assignment 不是視圖元素,因此不接受它在視圖中。
所以,你需要做的是放入userSettings.loadrate = 0,.onChange然后放到TextField外面.onChange。
我不確定您的預期結果到底是什么,但這里有一個例子。
NavigationView {
VStack {
Form {
Toggle("Casual loading", isOn: $load)
.onChange(of: load) { value in
// Assignment should be inside a closure
if load == false {
userSettings.loadrate = 0
}
}
if load == true {
// View element should be a child of a view.
TextField("Casual Loading", value: $userSettings.loadrate, format: .number)
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/437379.html
上一篇:無法從清單中扣除總工資
