随着我们的代码库的成熟,我开始不喜欢将字典作为一种打包消息传递信息的模式,或者更糟的是,函数参数。它需要发送和接收函数都具有未记录的字符串文字 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 个参数的函数,只传递一个字典会容易得多(虽然可读性差)但现在你有相同的问题如上。
我尝试在这些类的头文件中创建 stub 的“消息类”(即一个头文件中的两个接口(interface)),消息类只是您定义并发送到创建更强大契约的方法的对象列表但这感觉不对。
如果我能做类似 typeDef
的事情就好了标题中的参数对象但不支持 NSObject
只有 int
这样的东西或 float
等
本质上,我正在尝试在消息发送者和消息接收者之间建立更强大的契约,无论是功能还是通知。
最佳答案
您可以为键定义常量。例如,请参阅有关 UIKeyboardDidShowNotification
的文档。有一个指向所有可用于获取有关通知的信息的 key 的链接。
更好的方法是将您的数据封装到一个类而不是字典中。创建一个带有属性的简单类。这将比字典更具 self 记录性。您可以在 .h 文件中看到属性名称和属性类型。
如果您发现您的方法需要 15 个参数,则需要退后一步并将这些参数封装到适当的类中。也许该方法可以适本地简化为几个参数和一个类或类似的东西。
关于ios - 比将 NSDictionaries 作为参数传递更好的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15011074/