我有一个包含两列的TableView -名称和值,其中名称是来自CoreData的对象的类实例的属性名称本身。value是一个文本字段,它是值或该属性,我希望用户能够在表视图中编辑它。
我将属性名和值分别存储在一个单独的数组中。所以我有propertyArray和valueArray,数组的顺序与键值对相匹配。
因此,我当然可以根据IndexPath确定正在编辑哪个属性,但我在弄清楚如何将实际属性值更改为文本字段中新输入的值时遇到了麻烦。
逻辑是我需要:
animal.(propertyArray[IndexPath.row]) = textField.text有没有办法创建一个字符串变量"animal.whateverTheAttributeIs“,并以某种方式将其转换为等式的左侧部分?
发布于 2020-10-25 22:52:31
您可以拥有一个字典,它使用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)
}这在一定程度上简化了,因为我在示例中假设所有属性都是字符串类型
https://stackoverflow.com/questions/64524575
复制相似问题