Ios 是否有用于创建条件词典的速记语法?
有没有办法创建条件词典?例如,假设有一个具有3个属性的自定义类:Ios 是否有用于创建条件词典的速记语法?,ios,objective-c,nsdictionary,Ios,Objective C,Nsdictionary,有没有办法创建条件词典?例如,假设有一个具有3个属性的自定义类: class UserInfoObject firstName lastName address 我需要的是从userInfoObject中为非nil属性创建NSDictionary。当我事先知道哪些属性是非nil时,这很简单,因此我可以使用这种速记语法(或经典语法): 但是在我的例子中,我需要创建可变字典,然后对每个属性执行手动检查/添加。下面还有其他较短的方法吗 // Create mutable thing
class UserInfoObject
firstName
lastName
address
我需要的是从userInfoObject中为非nil属性创建NSDictionary。当我事先知道哪些属性是非nil时,这很简单,因此我可以使用这种速记语法(或经典语法):
但是在我的例子中,我需要创建可变字典,然后对每个属性执行手动检查/添加。下面还有其他较短的方法吗
// 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:
将值和键添加到字典中,除非值为nil,在这种情况下,该方法会尝试使用removeObjectForKey:
删除键
因此,使用setValue:forKey:
而不是setObject:forKey:
。此方法没有速记文字。您可以编写自己的NSMutableDictionary子类,并覆盖setObject:forkeydsubscript:
以安全地忽略nil
对象,但这似乎工作量太大。正如文件所说:
通常不需要将NSMutableDictionary子类化。如果确实需要自定义行为,通常最好考虑组合而不是子类。
这意味着您应该创建自己的包装器对象,而不是子类,该对象有一个NSMutableDictionary作为备份存储,并实现访问内部字典所需的所有方法,覆盖
setObject:forkeydsubscript:
以使用nil。但我不建议仅仅为了避免其他地方的几行代码 setValue:forKey:是否有简写语法?因为我假设这个(userInfoObject[@“firstName”]=@“John”)使用“setObject:forKey:”它实际上使用setObject:forkeydsubscript:,如下所述:setValue:forKey:
// 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;
}