【发布时间】:2021-06-27 11:02:09
【问题描述】:
新手(对于 swiftui),我想在 url 准备好后立即显示图像(刷新视图)。显然 State var 还不够。似乎 .onReceive 和发布者可能会有所帮助,但我很无助。 注意:我使用 KingFisher,但任何加载器的情况似乎都是一样的。情况似乎很特殊(创建视图时 url 未准备好)但这是一个更普遍的主题:例如,当请求同步并且个人资料照片需要更新时当其他用户更改它时。
编辑:经过更多测试,如果我们使用 dispachQueue 推迟一秒钟然后尝试更新,则视图似乎已更新。直接使用 firebase onAppear 检索值时不会更新
import SwiftUI
import Firebase
import Kingfisher
struct Test4: View {
@State private var mProfilePhotoUrl: URL = URL(string:"0")!
var body: some View {
VStack(alignment: .center,spacing : 0){
KFImage(mProfilePhotoUrl)
}.onAppear(){
setUpProfileElements()
}
}
private func setUpProfileElements(){
// FirebaseRequest -> mProfilePhotoUrl = URL(string: User.profilePhoto)
}
}
【问题讨论】:
-
在这种情况下,这似乎应该是 KingFisher 的责任——我很惊讶它不能处理这种情况。给它加上
.id(mProfilePhotoUrl)来强制它在URL改变时改变呢? -
这会在使用延迟时更新,但不会在出现使用的 firebase 请求时更新。使用 Id 强制更新成功了。其他人可能会支持这个案子。谢谢!
标签: image swiftui loader event-receiver