我是 SwiftUI 的新手。我只是想知道如何使用 addRestaurant 函式將新專案插入到我的串列中。restaurant.append() ... 在 addRestaurant 中不起作用。當用戶點擊按鈕時,串列應該重繪 專案。
這是到目前為止的代碼:
import SwiftUI
struct Restaurant: Identifiable {
let id = UUID()
let name: String
let stars: String
}
struct RestaurantRow: View {
var restaurant: Restaurant
var body: some View {
HStack
{
Image(systemName: "photo")
Text("\(restaurant.name)")
Text("Stars \(restaurant.stars)").foregroundColor(Color.yellow)
}
}
}
struct ContentView: View {
@State var restaurants = [
Restaurant(name: "Joe's Original", stars: "5"),
Restaurant(name: "The Real Joe's Original", stars: "4"),
Restaurant(name: "Original Joe's", stars: "3")
]
var body: some View {
NavigationView{
List(restaurants)
{ restaurant in
RestaurantRow(restaurant: restaurant)
}
.navigationBarItems(
trailing: Button(action: addRestaurant, label: { Text("Add")}))
.navigationTitle("Table View Playground")
}.refreshable {
restaurants.append(Restaurant(name: "Joe's", stars: "2"))
}
}
}
func addRestaurant(){
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
uj5u.com熱心網友回復:
addRestaurant()需要包含在ContentView結構中。否則,您無權訪問在restaurants中創建的變數ContentView。這稱為變數的范圍。您只能在其自己的范圍內訪問它,因此,如果在結構中定義,則它僅在結構內可用。谷歌 Swift/SwiftUI 范圍,你會發現大量的資訊。因此,您的代碼將更改為:
struct ContentView: View {
@State var restaurants = [
Restaurant(name: "Joe's Original", stars: "5"),
Restaurant(name: "The Real Joe's Original", stars: "4"),
Restaurant(name: "Original Joe's", stars: "3")
]
var body: some View {
NavigationView{
List(restaurants)
{ restaurant in
RestaurantRow(restaurant: restaurant)
}
.navigationBarItems(
trailing: Button(action: addRestaurant, label: { Text("Add")}))
.navigationTitle("Table View Playground")
}.refreshable {
addRestaurant()
}
}
func addRestaurant(){
restaurants.append(Restaurant(name: "Joe's", stars: "2"))
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/493741.html
