我传递位置ID后,具有从Google地方信息中捕获商家图像的功能。我能够“打印”照片并从编写的功能中看到实际照片,但我不确定如何返回该图像以便将其放置在视图中。我的想法是我可以从函数中返回图像,并使其替换视图中的“ placeHolderImage”。
这里是代码:
struct RestaurantDetail: View {
var name: String
var placeID: String
var address: String
var city: String
var state: String
var zipCode: String
var phone: String
var about: String
var website: String
var inputLat: Double
var inputLong: Double
var foodType: String
var fileURL: String
@State var placeHolderImage = Image(systemName: "flag.fill")
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
VStack {
placeHolderImage
.resizable()
.aspectRatio(contentMode: .fill)
.frame(height: 150)
.clipped()
.padding(.bottom)
VStack {
HStack {
Text("About")
.font(.title)
.fontWeight(.bold)
Spacer()
}.padding(.horizontal)
.padding(.vertical, 10)
HStack {
Text(about)
.font(.footnote)
Spacer()
}.padding(.horizontal)
.padding(.bottom, 40)
HStack {
Text("Location")
.font(.title)
.fontWeight(.bold)
Spacer()
}.padding(.horizontal)
MapLocation(inputLat: inputLat, inputLong: inputLong, inputTitle: name, inputFoodType: foodType)
.frame(height: 160)
HStack {
Text(name)
.font(.system(size: 20))
.fontWeight(.semibold)
}.padding(.vertical, 10)
HStack {
Text(address) + Text(", ") + Text(city) + Text(", ") + Text(state) + Text(" ") + Text(zipCode)
}.font(.system(size: 13))
}
}
}.onAppear {
self.getPhotos(placesID: self.placeID)
}
}
func getPhotos(placesID: String) -> (UIImage) {
let client = GMSPlacesClient()
print("getPhotos function ran")
client.lookUpPhotos(forPlaceID: placeID) { (metadatalist, err) in
if let err = err {
print("error when looking up photos:", err)
return
}
// print(metadatalist)
guard let firstPhotoMetadata = metadatalist?.results.first else { return }
client.loadPlacePhoto(firstPhotoMetadata) { (image, err) in
if let err = err {
print("Failed to load photo for place:", err)
return
}
guard let placeImage = image else { return }
print(placeImage)
return placeImage
}
}
}
}
尝试以下操作,如果API设置正确,则可以正常工作
func getPhotos(placesID: String) { // async, so no return needed
let client = GMSPlacesClient()
print("getPhotos function ran")
client.lookUpPhotos(forPlaceID: placeID) { (metadatalist, err) in
if let err = err {
print("error when looking up photos:", err)
return
}
// print(metadatalist)
guard let firstPhotoMetadata = metadatalist?.results.first else { return }
client.loadPlacePhoto(firstPhotoMetadata) { (image, err) in
if let err = err {
print("Failed to load photo for place:", err)
return
}
guard let placeImage = image else { return }
print(placeImage)
DispatchQueue.main.async { // state must be updated in main queue
self.placeHolderImage = Image(uiImage: placeImage)
}
}
}
}