我已经尝试过了,但是我不知道如何在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完成处理程序的方法,但是我不知道如何使用它来解决问题。谢谢!
使用如下的完成处理程序,
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 {
@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
时将呼叫getProfilePicture
。 image
中指定的image in
(在调用函数时)是完成处理程序传递的内容[completion(image)
)。然后,您可以将placeHolderImage
更改为在getProfilePicture
中获得的内容,但是在执行此操作之前,您需要将uiImage
转换为Image
。还请确保将@State
关键字添加到变量中,以便一旦更改View
就会更新。
希望有帮助!