swift - 更改关联枚举的值
问题描述
我有这个associated enum:
public typealias TextFieldInfo = (type: TextFieldType, title: String, entry: String)
public enum TextFieldType {
case text
case number
case capitalLetter
case date
case entry
}
public enum TextFieldModelEnum {
case generic(type: TextFieldType, title: String)
case entry(type: TextFieldType, title: String, entry: String)
var info: TextFieldInfo {
switch self {
case .generic(let type, let title):
return (type, title, "")
case .entry(let type, let title, let entry):
return (type, title, entry)
}
}
}
我正在尝试更改entry
以下方法中的值,但它在第一行给我一个错误:
无法分配给“字符串”类型的不可变表达式
extension ThirdViewController: TextProtocol {
func getText(text: String) {
self.array[self.rowListSelected].info.entry = text
let indexPaths = [IndexPath(row: self.rowListSelected, section: 0)]
self.tableView.reloadRows(at: indexPaths, with: .none)
print(text)
}
}
解决方案
我想我终于想出了如何使用set
计算属性来做到这一点
var info: TextFieldInfo {
get {
switch self {
case .generic(let type, let title):
return (type, title, "")
case .entry(let type, let title, let entry):
return (type, title, entry)
}
}
set {
switch self {
case .generic:
self = TextFieldModelEnum.generic(type: newValue.type, title: newValue.title)
case .entry:
self = TextFieldModelEnum.entry(type: newValue.type, title: newValue.title, entry: newValue.entry)
}
}
}
例子
var tf = TextFieldModelEnum.entry(type: .text, title: "A Title", entry: "An Entry")
print(tf.info.entry)
print(tf.info.title)
tf.info.entry = "new entry"
print(tf.info.entry)
tf.info.title = "new title"
print(tf.info.title)
输出
一个条目
一个标题
新条目
新标题
推荐阅读
- vba - 在 VBA 中抑制 PDF 转换错误消息
- c# - 由于 Microsoft.Toolkit.Uwp.UI.dll 上的错误,Uno 平台中的 WebAssembly 无法编译
- vue.js - 如何使用 Vue.js 跟踪谷歌分析活动
- javascript - React-Redux:如何从数组中添加每个项目
- powershell - 我们如何重新制作程序以运行并将新值保存在 c.csv 文件中?
- python - 乘法布尔矩阵
- typescript - 在打字稿项目中使用别名的问题
- python - 无法使用 DefaultAzureCredential 创建 DataFactoryManagementClient()?
- ios - 在 iOS 中,有没有办法找出屏幕上是否呈现了任何视图?
- php - 合并两个数组,一个数组每个 5 个键