我整天都在看 StackOverFlow(和 Internet)以使這個按鈕起作用,但我沒有找到任何東西。
如您所見,我想通過使用最簡單的解決方案來更改單擊按鈕時的值。
以下是代碼:
// Element.swift
import Foundation
import SwiftUI
struct Element: Identifiable {
let id = UUID()
@State var value: Double
let title: String
}
let elements = [
Element(value: 10, title: "This is a title"),
Element(value: 100, title: "This is another title")
]
// ElementView.swift
import SwiftUI
struct ElementView: View {
let element: Element
var body: some View {
HStack {
Text(element.title)
Text("\(element.value)")
Button("More", action: { element.value = 10 })
}
}
}
struct ElementView_Previews: PreviewProvider {
static var previews: some View {
ElementView(element: elements[0])
}
}
// ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
ForEach(elements) { element in
ElementView(element: element)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
令人驚訝的是,我對 Xcode 沒有任何問題。
我錯過了什么?提前致謝!:P
uj5u.com熱心網友回復:
你有幾個關于你如何對待狀態的問題。通常,在 SwiftUI 中,狀態由父級持有并通過 Binding 傳遞給子級。@State用于內部而不是模型內部也非常重要View。
有關更改和解釋,請參閱行內注釋。
struct Element: Identifiable {
let id = UUID()
var value: Double //Remove @State here -- @State is for use in a View
let title: String
}
struct ElementView: View {
@Binding var element: Element //pass Element via Binding so it is mutable
var body: some View {
HStack {
Text(element.title)
Text("\(element.value)")
Button("More", action: { element.value = 10 })
}
}
}
struct ElementView_Previews: PreviewProvider {
static var previews: some View {
ElementView(element: .constant(Element(value: 10, title: "This is a title"))) //use .constant() for a Binding in a Preview
}
}
struct ContentView: View {
@State private var elements = [ //define elements with @State so they are mutable
Element(value: 10, title: "This is a title"),
Element(value: 100, title: "This is another title")
]
var body: some View {
VStack {
ForEach($elements) { $element in //use element binding syntax to get a binding to each item in the array
ElementView(element: $element)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/452925.html
上一篇:陣列陣列無法正確使用表情符號
