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

标签 ios objective-c macos model-view-controller design-patterns

随着我们的代码库的成熟,我开始不喜欢将字典作为一种打包消息传递信息的模式,或者更糟的是,函数参数。它需要发送和接收函数都具有未记录的字符串文字 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"];
}

你必须记住 thisKeythatKeyThisObject 类型的键和 ThatObject对于该通知,确保您可以在某处为这些键创建一些常量,但这并不能真正解决问题。

假设你有一个需要 15 个参数的函数,你不会创建一个有 15 个参数的函数,只传递一个字典会容易得多(虽然可读性差)但现在你有相同的问题如上。

我尝试在这些类的头文件中创建 stub 的“消息类”(即一个头文件中的两个接口(interface)),消息类只是您定义并发送到创建更强大契约的方法的对象列表但这感觉不对。

如果我能做类似 typeDef 的事情就好了标题中的参数对象但不支持 NSObject只有 int 这样的东西或 float

本质上,我正在尝试在消息发送者和消息接收者之间建立更强大的契约,无论是功能还是通知。

最佳答案

您可以为键定义常量。例如,请参阅有关 UIKeyboardDidShowNotification 的文档。有一个指向所有可用于获取有关通知的信息的 key 的链接。

更好的方法是将您的数据封装到一个类而不是字典中。创建一个带有属性的简单类。这将比字典更具 self 记录性。您可以在 .h 文件中看到属性名称和属性类型。

如果您发现您的方法需要 15 个参数,则需要退后一步并将这些参数封装到适当的类中。也许该方法可以适本地简化为几个参数和一个类或类似的东西。

关于ios - 比将 NSDictionaries 作为参数传递更好的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15011074/

相关文章:

ios - 使用 CMTimeMapping 寻找 AVComposition 会导致 AVPlayerLayer 卡住

ios - Swift 中的数组操作

ios - 一个xib,几个子类

iphone - 为什么这段代码不能用于从类中引用常量?

ios - 使用基于页面的导航将数组数据从一个界面传递到 watchkit 中的另一个界面?

macos - 错误 MSB4057 : The target "Pack" does not exist in the project - Visual Studio for Mac

ios - coredata导入初始数据的方法

iphone - 通过 ASIHTTPRequest 传递数组 - POST

Homebrew 安装的 PHP7 不适用于 macOS 上的 Apache

macos - 在 Mac 上编译 ARM .s 文件