28 lines
		
	
	
		
			933 B
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			933 B
		
	
	
	
		
			Swift
		
	
	
	
	
	
import Foundation
 | 
						||
import Combine
 | 
						||
 | 
						||
class NewHomeTabViewModel: ObservableObject {
 | 
						||
    @Published var posts: [Post] = []
 | 
						||
    @Published var isLoading = true
 | 
						||
    
 | 
						||
    private var hasLoadedData = false
 | 
						||
 | 
						||
    func fetchDataIfNeeded() {
 | 
						||
        // Загружаем данные только если они еще не были загружены
 | 
						||
        guard !hasLoadedData else { return }
 | 
						||
        
 | 
						||
        isLoading = true
 | 
						||
        PostService.shared.fetchAllPosts { [weak self] fetchedPosts in
 | 
						||
            // Используем weak self чтобы избежать циклов сильных ссылок
 | 
						||
            guard let self = self else { return }
 | 
						||
            
 | 
						||
            // Обновляем UI в основном потоке
 | 
						||
            DispatchQueue.main.async {
 | 
						||
                self.posts = fetchedPosts
 | 
						||
                self.isLoading = false
 | 
						||
                self.hasLoadedData = true
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |