[英]@Binding causing memory issue in swiftUI?
I am using @@Binding which i am passing to function but it causes memory leak and app freezes.我正在使用我传递给 function 的 @@Binding 但它会导致 memory 泄漏和应用程序冻结。
import SwiftUI
struct BottomView: View {
var accessibilityID: String
var viewModel: ViewModel
@Binding var selectedPoductDetails: [String: SelectedProductDetail]
init(accessibiltyID: String, viewModel: ViewModel selectedPoductDetails: Binding<[String: SelectedProductDetail]>) {
self.viewModel = viewModel
self.accessibilityID = accessibiltyID
self._selectedPoductDetails = selectedPoductDetails
}
var body: some View {
VStack {
HStack {
let totalAmount = viewModel.totalAmount(selectedPoductDetails:
selectedPoductDetails)
Text(totalAmount)
}
}
}
My function in another class is我的function在另一个class是
func totalAmount(selectedPoductDetails: [String: SelectedProductDetail]) -> String {
self.selectedProductDetails = selectedPoductDetails
let amount = selectedPoductDetails.reduce(into: 0, { $0 += $1.value.amount })
return amount
}
Why memory leak and app freeze?为什么 memory 泄漏和应用冻结? i am comment code我是评论码
let totalAmount = viewModel.totalAmount(selectedPoductDetails:
selectedPoductDetails)
everything works fine.一切正常。
what am I doing wrong?我究竟做错了什么?
You just cycles calls, because assigning property activates binding, which activates update, which calls calculable body, which calls viewModel.totalAmount
again... and go on...你只是循环调用,因为分配属性激活绑定,激活更新,调用可计算的主体,再次调用viewModel.totalAmount
...和 go ...
just remove只是删除
func totalAmount(selectedPoductDetails: [String: SelectedProductDetail]) -> String {
// self.selectedProductDetails = selectedPoductDetails // << this !!
let amount = selectedPoductDetails.reduce(into: 0, { $0 += $1.value.amount })
return amount
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.