随着我们的代码库的成熟,我开始不喜欢将字典作为一种方法来传递消息传递的信息,或者更糟糕的是函数参数.它需要发送和接收功能都具有未记录的字符串文字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个参数的方法,则需要退回并将这些参数封装到适当的类中.也许该方法适当地减少了几个参数和类或类似的东西.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。