ios - 无法将结构变量设为可变类型
问题描述
我面临“无法分配给'Bool'类型的不可变表达式”的问题。请看下面的代码。我在viewForHeaderInSection
. 实际上我应该在哪里进行修改以使其工作?
struct VenueDetail {
var isVeg: Bool
}
struct VenueDetailDTOMapper {
static func map(_ dto: DetailDataDTO) -> VenueDetail {
return VenueDetail(isVeg: dto.isVeg)
}
}
在 API Manager 中,我从 api 获取数据并使用上面的结构如下
let venueDetail = VenueDetailDTOMapper.map(getDetail)
视图模型:
enum VenueDetailVMTypes {
case veueInfoInfo
}
protocol VenueDetailVMItems {
var type: VenueDetailVMTypes { get }
}
struct VenueInfoViewModel: VenueDetailVMItems {
var type: VenueDetailVMTypes {
return .veueInfoInfo
}
var headerSection: VenueDetail
}
func cretaDataSource() {
if let getVenueDetails = self.venueDetails {
let vmType = VenueInfoViewModel(headerSection: getVenueDetails)
arrayDataSource.append(vmType)
}
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
let venueDetailVMItems = viewModel.arrayDataSource[section]
switch venueDetailVMItems.type {
case .veueInfoInfo:
let headerCell = tableView.dequeueReusableCell(withIdentifier: kCellIdentifierVenueHeader) as! VenueHeaderTVCell
headerCell.updateCellData(detail: (venueDetailVMItems as! VenueInfoViewModel).headerSection)
headerCell.foodTypeHandler = { [weak self] (isOn) in
guard let strongSelf = self else {
return
}
strongSelf.viewModel.showOnlyVegMenu(shouldShowVeg: isOn)
(venueDetailVMItems as! VenueInfoViewModel).headerSection.isVeg = isOn. //Cannot assign to immutable expression of type 'Bool'
strongSelf.tableView.reloadData()
}
headerView.addSubview(headerCell)
break
}
return headerView
}
解决方案
结构是字段的聚合;如果特定结构实例是可变的,则其字段将是可变的;如果一个实例是不可变的,那么它的字段也是不可变的。因此,必须为任何特定实例的字段可能是可变或不可变的可能性准备结构类型。
请检查这个
所以试着把let改成var
确保arrayDataSource
是可变的用户变量不允许
var arrayDataSource = [VenueInfoViewModel]()
推荐阅读
- javascript - 如何从javascript spring-boot访问配置变量
- regex - 匹配“可变”字符串/序列的正则表达式?+ 回溯?
- javascript - 使用对象的值获取对象的属性名称
- amazon-web-services - 您如何通过代码管道部署现有的部署工件?
- c - 我该如何修复它“func_addr”功能
- laravel - 如何在 laravel 8 和没有令牌访问前失眠的护照中控制 405 响应
- wix - 自定义操作作为 FileKey 成功,但从 WiXQuietExec 失败
- python - 有没有办法在 Kivy 中制作一个左侧有 3 个文本输入字段,右侧有 1 个长文本输入的 GUI?
- javascript - 是什么阻止了 loop_start 中的 wp_enqueue_script
- java - 在没有科学记数法的情况下格式化字符串中的双精度数