SwiftUI-从函数返回图像到视图

问题描述 投票:0回答:1

我传递位置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

        }
    }
}

}

function swiftui google-places-api
1个回答
0
投票

尝试以下操作,如果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)
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.