迅速。按字符串名称

时间:2016-07-12 00:13:02

标签: ios swift reflection properties

我在用户viewcontroller类中有很多用户属性,即

//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,这样我就可以使用获取的coredata值设置ivars的值,即字面意义上的内容如下所示......

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

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

1 个答案:

答案 0 :(得分:0)

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