首页 > 解决方案 > 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
    
}

谢谢,

雅各布

标签: iosswiftmvvmswiftui

解决方案


推荐阅读