有没有办法减少Obj-C中重复声明的代码?
E.g:
我有
localNotification.fireDate = self.dueDate;
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.alertBody = self.text;
localNotification.soundName = UILocalNotificationDefaultSoundName;
可以简化为这样的吗?
localNotification
.fireDate = self.dueDate;
.timeZone = [NSTimeZone defaultTimeZone];
.alertBody = self.text;
.soundName = UILocalNotificationDefaultSoundName;
谢谢!
答案 0 :(得分:6)
您可以使用键值编码。首先将值打包到字典中,并将属性名称作为键
NSDictionary *parameters = @{@"fireDate": self.dueDate,
@"timeZone":[NSTimeZone defaultTimeZone],
@"alertBody":self.text,
@"soundName": UILocalNotificationDefaultSoundName }
,可以轻松枚举带有块的键和对象。
[parameters enumerateKeysAndObjectsUsingBlock: ^(id key,
id object,
BOOL *stop)
{
[localNotification setValue:object forKey:key];
}];
如果你一遍又一遍地使用这个代码,我会在NSNotification上创建一个类别,这个类别会占用字典并终止枚举。
比你可以简单地使用
[localNotification setValuesForKeysWithDictionary:parameters];
当然你可以写得更短:
[localNotification setValuesForKeysWithDictionary:@{@"fireDate": self.dueDate,
@"timeZone":[NSTimeZone defaultTimeZone],
@"alertBody":self.text,
@"soundName": UILocalNotificationDefaultSoundName }];
现在它几乎与提议的语法一样紧凑。
答案 1 :(得分:2)
唯一的方法是声明一个采用您想要设置的参数的方法。
-(void)notification:(UILocalNotification *)notification setFireDate:(NSDate *)date
setAlertBody:(NSString *)alertBody {
notification.fireDate = date;
notification.alertBody = alertBody;
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.soundName = UILocalNotificationDefaultSoundName;
}
可以考虑将后两行设置为“默认”。将这些行更改为您想要的默认值。然后...
UILocalNotification *myNotification = ...
NSDate *tenMinutesAway = [NSDate ...
[self notification:myNotification setFireDate:tenMinutesAway setAlertBody:@"Hello world!"];
您还可以查看子类UILocalNotification
并在-init
方法中设置一堆默认行为,这样可以省去您必须输入.soundName
和{{1}再次