Ios 是否有用于创建条件词典的速记语法?

Ios 是否有用于创建条件词典的速记语法?,ios,objective-c,nsdictionary,Ios,Objective C,Nsdictionary,有没有办法创建条件词典?例如,假设有一个具有3个属性的自定义类: class UserInfoObject firstName lastName address 我需要的是从userInfoObject中为非nil属性创建NSDictionary。当我事先知道哪些属性是非nil时,这很简单,因此我可以使用这种速记语法(或经典语法): 但是在我的例子中,我需要创建可变字典,然后对每个属性执行手动检查/添加。下面还有其他较短的方法吗 // Create mutable thing

有没有办法创建条件词典?例如,假设有一个具有3个属性的自定义类:

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;
}