地址视图
import SwiftUI
import MapKit
import SwiftData
struct AddressView: View {
@State private var locationService = LocationService(completer: .init())
@State private var search: String = ""
@Binding var isPresentingLocationView: Bool
@Bindable var review: Review
var body: some View {
NavigationStack {
ZStack {
LinearGradient(gradient: Gradient(colors: [Color(red: 0.9725490196078431, green: 0.9607843137254902, blue: 0.8627450980392157, opacity: 1), Color(red: 0.9137254901960784, green: 0.9254901960784314, blue: 0.8509803921568627, opacity: 1), Color(red: 0.9882352941176471, green: 0.7529411764705882, blue: 0.13333333333333333, opacity: 1), Color(red: 0.9450980392156862, green: 0.47058823529411764, blue: 0.08627450980392157, opacity: 1)]), startPoint: .top, endPoint: .bottom).ignoresSafeArea()
.navigationTitle("Add Location")
VStack {
HStack {
Image(systemName: "magnifyingglass")
TextField("Search for a restaurant", text: $search)
.autocorrectionDisabled()
}
Spacer()
List {
ForEach(locationService.completions) { completion in
Button(action: {didTapOnCompletion(completion)}) {
VStack(alignment: .leading, spacing: 4) {
Text(completion.title)
.font(.headline)
.fontDesign(.rounded)
Text(completion.subTitle)
}
}
.listRowBackground(Color.clear)
}
}
.listStyle(.plain)
.scrollContentBackground(.hidden)
}
.onChange(of: search) {
locationService.update(queryFragment: search)
}
.padding()
.presentationBackground(.regularMaterial)
.presentationBackgroundInteraction(.enabled(upThrough: .large))
}
}
}
private func didTapOnCompletion(_ completion: SearchCompletions) {
isPresentingLocationView = false
review.restaurantName = completion.title
review.location = completion.subTitle
print("this is the name \(review.restaurantName) and this is the location \(review.location)")
}
}
我无法弄清楚发生了什么。这也是一些GIF。
您应该将review
属性传递到地址视图,而不是创建并传递一个新实例
Review