ios - 如何在 Swift 中设置属性本身可变的属性值
问题描述
我有一个包含两列的 TableView - 名称和值,其中名称是 CoreData 中对象的类实例的属性名称本身。value 是一个文本字段,它是 value 或该属性,我希望用户能够在 tableview 中编辑它。
我有属性名称和分别存储在单独数组中的值。所以我有 propertyArray 和 valueArray 并且数组的顺序与键控对匹配。
因此,我当然可以根据 IndexPath 确定正在编辑哪个属性,但我无法弄清楚如何将实际属性值更改为文本字段中新输入的值。
逻辑是我需要:
animal.(propertyArray[IndexPath.row]) = textField.text
有没有办法让我创建一个“animal.whateverTheAttributeIs”的字符串变量并以某种方式将其转换为该等式的左侧部分?
解决方案
您可以拥有一个字典,其中包含使用 KeyPath 的行号和属性之间的映射
struct Example {
var id: String
var name: String
var text: String
}
let rowMap: [Int: WritableKeyPath<Test, String>] = [0: \.id, 1: \.name, 2: \.text]
然后您在字典中查找以从一行中获取正确的键路径
if let keypath = rowMap[indexPath.row] {
exampleObject[keyPath: keypath] = "some value"
}
或者对于一个 NSObject 子类(你的类是)你可以使用setValue:forKeyPath
评论中提到的
if let keypath = rowMap[indexPath.row] {
exampleObject.setValue("some value", forKeyPath: keypath)
}
这有点简化,因为我从您的示例中假设所有属性都是 String 类型
推荐阅读
- spring-boot - 如何通过全局启用延迟初始化的 JMX 使 Spring Boot Actuator 可用?
- php - 发生错误时,codeigniter 4 未显示 mysql 完整查询
- html - 使用 Left: `100px;` css tag dosnt do a thing
- python - 在 Python 中使用 setter 和 getter 保护 numpy 属性
- python - Python:使用重复出现的符号将 txt 文件分隔为多个文件
- xaml - Xamarin CollectionView - 在 ItemTemplate 中访问父绑定?
- list - 在 if 条件之后对象设置为 nil
- javascript - 如何为内联 JavaScript 编写单元测试?
- typescript1.8 - 为什么我在 Typescript 下得到了这个结果?
- google-cloud-platform - 用于评估 BQ 数据集或项目的 CLI 工具或脚本