首页 > 解决方案 > 线程 1:EXC_BAD_ACCESS (code=2, address=0x7ffee5c95ff8) 我是 swiftUI 的新手,我收到了这个错误。任何帮助表示赞赏

问题描述

我的代码 -

- 看法

struct BookDetail: View {
    
    @ObservedObject private var bookViewModel = BookViewModel()

    
    var id = Int()
    var body: some View {
        Text("Hello, World!").onAppear{ bookViewModel.BookDetail() }
       
    }
}

-- 查看模型

class BookViewModel: ObservableObject{

    let dataBookApi = ApiService()
    @Published   var bookDetailViewModel : BookDetailViewModel?

     var cancellable: AnyCancellable?
     
    func BookDetail(){
     
        cancellable = dataBookApi.fetchBook().sink(receiveCompletion: {_ in
            
         }, receiveValue: {  fetchedData in
            self.bookDetailViewModel = BookDetailViewModel(bookDetails: fetchedData)
       
            print("fetchedData -- ", fetchedData)
         
         })
     
     }
}

-- API调用

class ApiService  {
    let bookDetail = BookDetail()
  
    var componentsBook: URLComponents {
        var componentsBook = URLComponents()
        componentsBook.scheme = "http"
        componentsBook.host = "tpbookserver.herokuapp.com"
        componentsBook.path = "/books"
        componentsBook.queryItems = [URLQueryItem(name: "id", value: String(bookDetail.id))]
        return componentsBook
    }
    
    func  fetchBook() -> AnyPublisher<BookDetails,Error> {
        print("components --",componentsBook.url!)
        
        
        guard let url = componentsBook.url else {
            fatalError()
        }
        return URLSession.shared.dataTaskPublisher(for: url)
            .map {$0.data}
            .decode(type: BookDetails.self, decoder: JSONDecoder())
            .receive(on: DispatchQueue.main)
            .eraseToAnyPublisher()
        
        
    }
    
    
}

我知道发生了无限循环。您能否建议我一种将 id 传递给 api 服务的方法,以便我可以将 id 作为参数传递

标签: swiftswiftui

解决方案


推荐阅读