首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift中设置属性本身是可变的属性值

如何在Swift中设置属性本身是可变的属性值
EN

Stack Overflow用户
提问于 2020-10-25 22:04:25
回答 1查看 91关注 0票数 2

我有一个包含两列的TableView -名称和值,其中名称是来自CoreData的对象的类实例的属性名称本身。value是一个文本字段,它是值或该属性,我希望用户能够在表视图中编辑它。

我将属性名和值分别存储在一个单独的数组中。所以我有propertyArray和valueArray,数组的顺序与键值对相匹配。

因此,我当然可以根据IndexPath确定正在编辑哪个属性,但我在弄清楚如何将实际属性值更改为文本字段中新输入的值时遇到了麻烦。

逻辑是我需要:

代码语言:javascript
运行
复制
animal.(propertyArray[IndexPath.row]) = textField.text

有没有办法创建一个字符串变量"animal.whateverTheAttributeIs“,并以某种方式将其转换为等式的左侧部分?

EN

回答 1

Stack Overflow用户

发布于 2020-10-25 22:52:31

您可以拥有一个字典,它使用KeyPath保存行号和属性之间的映射

代码语言:javascript
运行
复制
struct Example {
    var id: String
    var name: String
    var text: String
}

let rowMap: [Int: WritableKeyPath<Test, String>] = [0: \.id, 1: \.name, 2: \.text]

然后在字典中查找,从一行中获得正确的键路径

代码语言:javascript
运行
复制
if let keypath = rowMap[indexPath.row] {
    exampleObject[keyPath: keypath] = "some value"
}

或者,对于NSObject子类(即您的类),您可以使用注释中提到的setValue:forKeyPath

代码语言:javascript
运行
复制
if let keypath = rowMap[indexPath.row] {
    exampleObject.setValue("some value", forKeyPath: keypath)
}

这在一定程度上简化了,因为我在示例中假设所有属性都是字符串类型

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64524575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档