ios – 比传递NSDictionaries更好的模式作为参数?

随着我们的代码库的成熟,我开始不喜欢将字典作为一种方法来传递消息传递的信息,或者更糟糕的是函数参数.它需要发送和接收功能都具有未记录的字符串文字API.
..in some function..
NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
                         thisObject,@"thisKey",thatObject,@"thatKey",nil];

[[NSNotificationCenter defaultCenter] postNotificationName:@"MY_NOTIFICATION" object:nil userInfo:info];
....

然后在someClass的听众中

- (void)someClassListener:(NSNotification *)notification {
    NSDictionary *info = [notification userInfo];

    ThisObject *ob1 = [info objectForKey:@"thisKey"];
    ThatObject *ob2 = [info objectForKey:@"thatKey"];
}

你必须记住thisKey和thatKey是该通知的ThisObject和ThatObject类型的键,确定你可以为某些键创建一些常量,但这并不能真正解决问题.

并且假设你有一个需要15个参数的函数,你不打算用15个参数创建一个函数,只是传递一个字典会更容易(虽然不太可读)但现在你遇到了与上面相同的问题.

在这些类的头文件中创建了“消息类”(即一个标题中的两个接口),而消息类只是一个对象列表,您定义并发送给方法,这会创建一个更强的契约,但这感觉错误.

如果我可以在标题中执行类似typeDef参数对象的操作,但是它不支持NSObject的唯一内容,如int或float等,那就太棒了.

本质上我正在尝试在消息发送者和消息接收者之间创建一个更强大的契约,即函数通知.

解决方法

您可以为键定义常量.作为示例,请参阅UIKeyboardDidShowNotification的文档以获取示例.所有密钥都有一个链接,可用于获取有关通知的信息.

更好的方法是将数据封装到类而不是字典中.创建一个包含属性的简单类.这将比字典更自我记录.您可以在.h文件中查看属性名称属性类型.

如果您发现需要15个参数的方法,则需要退回并将这些参数封装到适当的类中.也许该方法适当地减少了几个参数和类或类似的东西.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...