swift - 线程 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 作为参数传递
解决方案
推荐阅读
- php - 本地主机错误 PHP codeigniter 4 本地主机运行错误
- javascript - Flex 在 React Native 中没有按预期工作
- python - 一个 python 程序,每次迭代应该得到 2 个变量,用空格分隔,一个 str 和一个 int,并在第一个是 '#' 时结束
- python - 如何使用 Python 从 API 中仅提取一个值?
- vim - VIM 脚本 NERDTree-
根据条件重新映射 - fonts - 在 MS Word 中以非常特定的字体导出为 PDF,删除所有字母 i
- javascript - 无法使用 JavaScript Fetch API 调用 Apache Airflow REST API(CORs 错误)
- performance - 是否有真实的理由在半连续列表的二分搜索上使用二分搜索树?
- php - 未找到 Laravel API 控制器 - “目标类 **** 不存在”
- ajax - Typo3 v10 中的 Ajax 请求:通过 typeNum 调用控制器操作