ios - swift 。通过字符串名称引用实例变量

标签 ios swift reflection properties

我在用户 View Controller 类中有许多用户属性,即

//user vars
var email: String?
var givenName: String?
var familyName:String?
var phone: String?
var dob: NSDate?

在该类的一个方法中,我从 coredata 中检索用户数据,并在循环中使用该数据设置用户文本字段

for i in 0 ..< userTextFields.count {
   let field = userTextFields[i]
   let fieldName = userTextFieldKeyNames[i]
   let fieldText = currentUser.valueForKey(fieldName) as? String
   field.text = fieldText
 }

循环中的 fieldName 变量与上面类的 ivars 相匹配。有没有一种方法可以通过将它与 fieldName 字符串匹配来引用循环中的 ivars,这样我就可以使用获取的核心数据值设置 ivars 的值,即从字面意义上说,如下所示......

if self.property.name.text == fieldName {
  self.property.value == fieldText 
}

即以某种方式解析类中的各种属性名称……或者这是糟糕的设计? ....如果有任何关于以更好的方式实现相同结果的建议

最佳答案

不是 Swift-ish,因为它绕过了编译时类型检查。最好的选择是将它们全部保存在字典中,并使用协议(protocol)在字典中定义允许的数据类型,但即使这样也很差

关于ios - swift 。通过字符串名称引用实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38318093/

相关文章:

c# - 需要知道如何在 Xamarin.iOS 中终止后台进程

ios - Google Places API - 下一页 token 返回相同的结果

c# - 使用反射从 Property.GetValue 返回对象列表

iOS:在更改 View 之前设置属性

iphone - 检测两个物体的碰撞,每个物体都有不同的形状

ios - UIScrollView 与 UITextField/UIPickerView 的奇怪行为

java - 为什么在使用反射调用方法时得到 "object is not an instance of declaring class"?

c# - 类型 'System.Int64' 的表达式不能用于返回类型 'System.Object'

ios - 将 View Controller 推送到选项卡 Controller 中的 View 控件

ios - 如何从 Google 登录中检索年龄和性别