Mer*_*sal -1 didselectrowatindexpath swift
我的表格视图中有默认选择的单元格。我想在点击时更改此选定的语言,但无法这样做。我在“$0”行收到错误:
var languageViewModel = LanguageViewModel()
var languageTitles: [LanguageModel] = []
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var item = languageTitles[indexPath.row]
var value = item.isSelected
// Edit isSelected property and refresh table
languageTitles.forEach { $0.isSelected = false }
item.isSelected = !value
tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return languageCell(indexPath: indexPath)
}
private func languageCell(indexPath: IndexPath) -> LanguageTableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: LanguageTableViewCell.identifier, for: indexPath) as! LanguageTableViewCell
let item = languageTitles[indexPath.row]
if item.isSelected {
cell.setupSelected(item)
} else {
cell.setup(item)
}
return cell
}
Run Code Online (Sandbox Code Playgroud)
struct LanguageModel {
let language: Language
var isSelected: Bool = false
}
Run Code Online (Sandbox Code Playgroud)
class LanguageViewModel {
var locales: [Language] = [.tr, .eng, .az] //.ar
var currentLanguage = UserDefaultsUtil.getDeviceLanguage()
var languages: [LanguageModel] = []
func getLanguageTitles() {
languages = [
LanguageModel(language: .tr, isSelected: currentLanguage == locales[0].code),
LanguageModel(language: .eng, isSelected: currentLanguage == locales[1].code),
LanguageModel(language: .az, isSelected: currentLanguage == locales[2].code)
]
}
}
Run Code Online (Sandbox Code Playgroud)
当我想更改语言时,我无法点击另一个单元格。它始终是从视图模型中选择的一个
如果我将 didselectrowat 更改为
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var item = languageTitles[indexPath.row]
var value = item.isSelected
// Edit isSelected property and refresh table
for languageTitle in languageTitles {
languageTitle.isSelected = false
}
item.isSelected = !value
tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
无法分配给属性:“languageTitle”是“let”常量
Rob*_*ier 12
替换这个:
languageTitles.forEach { $0.isSelected = false }
Run Code Online (Sandbox Code Playgroud)
和:
for index in languageTitles.indices {
languageTitles[index].isSelected = false
}
Run Code Online (Sandbox Code Playgroud)
forEach有各种微妙而令人惊讶的行为。通常最好使用 afor-in代替。但关键问题是它LanguageModel是一个结构体并且具有值语义。当您将其分配给变量(即 $0,或 for-in 循环中的变量)时,会创建一个副本。如果您对副本进行更改,它们不会修改数组。(默认情况下,它们是常量,因此您无论如何都无法修改它们。)但是,通过下标运算符进行分配可以满足您的期望。
| 归档时间: |
|
| 查看次数: |
4296 次 |
| 最近记录: |