我正面临着“不能赋值给‘Bool’类型的不可变表达式”的问题。请看下面的代码。我在viewForHeaderInSection中遇到错误。实际上,我应该在哪里做修改才能让它工作呢?
struct VenueDetail {
var isVeg: Bool
}
struct VenueDetailDTOMapper {
static func map(_ dto: DetailDataDTO) -> VenueDetail {
return VenueDetail(isVeg: dto.isVeg)
}
}在API管理器中,我已经从api中获取数据,并使用上述结构,如下所示
let venueDetail = VenueDetailDTOMapper.map(getDetail)ViewModel:
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
}发布于 2019-11-23 08:19:32
结构是字段的集合;如果特定的结构实例是可变的,那么它的字段也是可变的;如果一个实例是不可变的,那么它的字段也是不可变的。因此,必须为任何特定实例的字段可能是可变的或不可变的可能性准备结构类型。
请查看this
因此尝试将let更改为var
确保arrayDataSource是可变的user var而不是let
var arrayDataSource = [VenueInfoViewModel]()https://stackoverflow.com/questions/59003133
复制相似问题