ios - Swift 用户模型 Flash 错误
问题描述
我注意到我的应用程序中有一个错误,它导致配置文件屏幕“闪烁”。我发现它与这一行有关(在我的视图模型中),通过注释所有其他行直到我发现错误哈哈:
self.user.stats = UserStats(posts: posts, followers: followers, following: following)
整个功能:
func fetchUserStats() {
guard let uid = user.id else { return }
COLLECTION_FOLLOWING.document(uid).collection("user-following").getDocuments { snapshot, _ in
guard let following = snapshot?.documents.count else { return }
COLLECTION_FOLLOWERS.document(uid).collection("user-followers").getDocuments { snapshot, _ in
guard let followers = snapshot?.documents.count else { return }
COLLECTION_POSTS.whereField("ownerUid", isEqualTo: uid).getDocuments { snapshot, _ in
guard let posts = snapshot?.documents.count else { return }
//print(posts)
self.user.stats = UserStats(posts: posts, followers: followers, following: following)
}
}
}
}
然后显示该信息(在我看来):
UserStatView(value: viewModel.user.stats?.posts ?? 0, title: "Posts")
NavigationLink(destination: UserListView(viewModel: SearchViewModel(config: .followers(viewModel.user.id ?? "")), searchText: .constant(""))) {
UserStatView(value: viewModel.user.stats?.followers ?? 0, title: "Followers")
}
NavigationLink(destination: UserListView(viewModel: SearchViewModel(config: .following(viewModel.user.id ?? "")), searchText: .constant(""))) {
UserStatView(value: viewModel.user.stats?.following ?? 0, title: "Following")
}
错误是它会导致配置文件屏幕闪烁一次,这是因为它首先将统计视图设置为其默认值 0,然后设置为实际值。当我删除“viewModel.user.stats?.posts ?? 0”并将其替换为像 20 这样的静态 int 时,闪烁消失了。你知道为什么它会导致整个屏幕闪烁吗?是否有任何解决方法使屏幕不闪烁?
对于上下文,我将用户统计信息声明为我的用户模型中的可选值:
struct User: Identifiable, Decodable {
let username: String
let email: String
var profileImageUrl: String
let fullname: String
@DocumentID var id: String?
var bio: String?
var stats: UserStats?
var isFollowed: Bool? = false
var verified: Bool?
var isCurrentUser: Bool { return AuthViewModel.shared.userSession?.uid == id }
}
struct UserStats: Decodable {
var posts: Int
var followers: Int
var following: Int
}
谢谢,
雅各布
解决方案
推荐阅读
- c - 使用介子构建 gobject 库会导致未定义的符号
- javascript - 组件样式在 React 应用程序中不优先于全局 CSS
- javascript - Vue Js动态类绑定未更新
- makefile - 在 Makefile 上,如何列出源文件所在的文件夹?
- javascript - 有没有办法测试我的网站是否有 js 错误(特别是在中国)
- flutter - 如何获得颤振小部件的高度?
- javascript - 如何更改作为列传递给 React Table 的子组件道具的值?
- javascript - 在 Reducer 中保存设置并从另一个 Reducer 访问它们?
- javascript - 如何在 html 中使用 Node.js 来使用 mysql 数据?
- jenkins - 在 Jenkins 管道中处理秘密