有没有办法创建条件NSDictionary?例如,假设有一个具有3个属性的自定义类:
class UserInfoObject
firstName
lastName
address
我需要为userInfoObject之外的非null属性创建NSDictionary。当我事先知道哪些属性为非零时,这很简单,因此我可以使用这种速记语法(或经典的语法):
NSDictionary *userInfoDic = @{@"firstName": userInfoObject.firstName, @"lastName":userInfoObject.lastName, @"address":userInfoObject.address}
但是,就我而言,我需要创建可变字典,然后对每个属性进行手动检查/添加。下面还有另一种较短的方法吗?
// Create mutable thing
NSMutableDictionary *userInfoDic = [NSMutableDictionary new];
// Check and add first name
if (userInfoDic.firstName) {
userInfoDic[@"firstName"] = userInfoDic.firstName;
}
// Check and add last name
if (userInfoDic.lastName) {
userInfoDic[@"lastName"] = userInfoDic.lastName;
}
// Check and add address
if (userInfoDic.address) {
userInfoDic[@"address"] = userInfoDic.address;
}
我有很多类和属性,因此速记(如果存在)可以简化此过程:)
setValue:forKey:
为可变字典执行此操作:
此方法使用来向字典添加值和键
setObject:forKey:
,除非value为nil,在这种情况下,该方法将尝试使用删除键removeObjectForKey:
。
因此,请使用setValue:forKey:
代替setObject:forKey:
。此方法没有简写文字。您可以编写自己的NSMutableDictionary子类并进行重写setObject:forKeyedSubscript:
以安全地忽略nil
对象,但这似乎工作太多。如文件所述:
通常,几乎不需要将NSMutableDictionary子类化。如果确实需要自定义行为,通常最好考虑组成而不是子类化。
这意味着您应该(而不是子类)创建自己的包装对象,该对象具有NSMutableDictionary作为后备存储,并实现访问内部字典所需的所有方法,setObject:forKeyedSubscript:
从而可以与nil一起使用。但是我不建议您只是为了避免在其他地方写几行代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句