我有一个我正在创建的表单,为了简化操作,我正在尝试为对象创建表单字段映射器。因此,我创建了以下字典:
self.fieldPropertyMapper = @{
@(CompanyFieldName):self.company,
@(CompanyFieldDescription):self.company.description,
@(CompanyFieldWebsite):self.company.website,
@(CompanyFieldTwitter):self.company.twitter,
@(CompanyFieldAddress):self.company.address,
@(CompanyFieldAddress2):self.company.address2,
@(CompanyFieldCity):self.company.city,
@(CompanyFieldState):self.company.state,
@(CompanyFieldZipcode):self.company.zipcode,
@(CompanyFieldPhone):self.company.phone
};
此处的密钥是CompanyFieldType
枚举的成员。
我的目标是稍后在我的表单中为返回的指针赋值。这就是我的意思:当我的某个表单中的文本字段停止编辑时,我正在设置该值。这就是我想要完成的事情:
- (void)textFieldDidEndEditing:(UITextField *)textField
{
CompanyFieldType fieldType = [self fieldTypeForTag:textField.tag];
// Set the value of the respective company property
// In theory it would be something like:
// self.fieldPropertyMapper[@(fieldType)] = textField.text;
}
我假设有一种通过引用分配的方法,但我忘记了如何做到这一点。 (它是使用&
符号还是**
?)我不记得了。帮助赞赏!如果我弄乱了我的术语,请随时告诉我。
答案 0 :(得分:1)
你无法完全按照自己的意愿去做。也就是说,没有指针魔法会做你想做的事。
但是,使用键值编码可以获得基本相同的效果。而不是存储访问属性的结果(例如self.company.website
),而是想要将关键路径存储为您感兴趣的值作为字符串 - 例如@"company.website"
。然后你可以这样做:
[self setValue:textField.text forKey:self.fieldPropertyMapper[textField.tag]];
答案 1 :(得分:0)
使用NSMapTable
初始化NSPointerFunctionsStrongMemory
作为键,使用NSPointerFunctionsOpaqueMemory
作为值。然后,您可以将支持属性的iVars的地址存储为表中的值。
[self.mapTable setObject:&_company forKey:@(CompanyFieldName)];
尚未对此进行测试,但这应该可以帮助您入门。