Eli*_*ont 4 completionhandler swift swift5 swiftui
我试过这个,但我不知道如何在 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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你能帮忙,我想把完成处理程序返回的图像放在这个视图中:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望它返回一个 UIImage 以便我最终可以在 SwiftUI 视图中使用它。我已经尝试使用带有 @escaping 完成处理程序的方法,但我不知道如何使用它来解决问题。谢谢!
你可以尝试一些让这个:
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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当ProfileView出现时它会调用getProfilePicture. 该image 规定image in(调用函数时)就是完成处理通过(completion(image))。然后您可以做的是将您placeHolderImage的内容更改为您输入的内容getProfilePicture,但在此之前您需要将您uiImage的Image. 还要确保您将@State关键字添加到您的变量中,以便一旦它更改您View就会更新。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
3378 次 |
| 最近记录: |