如何使用完成处理程序将图像放入SwiftUI视图中

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

我已经尝试过了,但是我不知道如何在SwiftUI视图中使用结果:

func getProfilePicture(_ completion: @escaping ((UIImage) -> Void)) {

    Alamofire.request(GIDSignIn.sharedInstance()?.currentUser.profile.imageURL(withDimension: 75) ?? "https://httpbin.org/image/png").responseImage { response in

        if let image = response.result.value {
            completion(image)

        }
    }
}

如果您需要帮助,我想将完成处理程序返回的图像放在此视图中:

struct ProfileView: View {
let profileInfo = ProfileInfo()
var placeHolderImage = Image(systemName: "person")

var body: some View {
    Group {
            placeHolderImage
                .clipShape(Circle())
                .overlay(
                    Circle().stroke(Color.white, lineWidth: 4))
                .shadow(radius: 10)
                .padding(10)
    }

}

}

我希望这返回一个UIImage,以便最终可以在SwiftUI视图中使用它。我已经尝试过使用带有@escaping完成处理程序的方法,但是我不知道如何使用它来解决问题。谢谢!

swift swiftui swift5 completionhandler
2个回答
1
投票

使用如下的完成处理程序,

func getProfilePicture(_ completion: @escaping ((UIImage) -> Void)) {

        Alamofire.request(GIDSignIn.sharedInstance()?.currentUser.profile.imageURL(withDimension: 75) ?? "https://httpbin.org/image/png").responseImage { response in

            if let image = response.result.value {
                completion(image)

            }
        }
    }

0
投票

您可以尝试以下操作:

struct ProfileView: View {
    @State var placeHolderImage = Image(systemName: "person")


    var body: some View {
        Group {
            placeHolderImage
                .clipShape(Circle())
                .overlay(
                    Circle().stroke(Color.white, lineWidth: 4))
                .shadow(radius: 10)
                .padding(10)
        }.onAppear{
            getProfilePicture{ image in
                self.placeHolderImage = Image(uiImage: image)
            }
        }

    }

}

出现ProfileView时将呼叫getProfilePictureimage中指定的image in(在调用函数时)是完成处理程序传递的内容[completion(image))。然后,您可以将placeHolderImage更改为在getProfilePicture中获得的内容,但是在执行此操作之前,您需要将uiImage转换为Image。还请确保将@State关键字添加到变量中,以便一旦更改View就会更新。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.