gpt4 book ai didi

objective-c - 这是 Objective-C 协议(protocol)的正确使用吗?

转载 作者:行者123 更新时间:2023-12-03 17:34:06 24 4
gpt4 key购买 nike

为了解决这个问题,我正在构建一个应用程序,其中包含三个自定义类:AppDelegateListWindowControllerViewOptionsWindowControllerAppDelegate 保留 ListWindowControllerViewOptionsWindowController 单个实例的属性。

当用户选择特定菜单项时,AppDelegate 中的操作将被执行,实例化 ViewOptionsWindowController。在此 Controller 窗口中所做的更改需要反射(reflect)在 ListWindowController 的窗口中(在窗口的 TableView 中添加或删除列)。

因此,我定义了一个协议(protocol) ViewOptionsChanged,它有两个必需的方法:-addColumn-removeColumn(参数为指出要添加或删除的内容)。我已经表明 ListViewController 符合此协议(protocol),并且在实例化 ViewOptionsWindowController 时传递 AppDelegateListViewController 实例>。 ViewOptionsWindowController的init方法的声明是:

- (id)initWithListController:(id <ViewOptionsChanged>)listController;

因此,ViewOptionsWindowController 知道的关于 listController 参数的唯一事实是它符合此协议(protocol)。

所以,我的问题是,这是 Objective-C 协议(protocol)的正确使用吗?或者其他一些设计模式会更合适吗?

最佳答案

是的..但我认为这有点令人困惑。我会让 listView 成为 viewOptions 的适当委托(delegate)

也许可以将协议(protocol)命名为 ViewOptionsDelegate 和方法 viewOptions:changedTo: 并将添加/删除列的逻辑放入 listController 中?

感觉更像 cocoa ,并且关于列的真正逻辑不属于 viewOptions。

但最终——即使你不同意——在我看来,它还是可以使用的。

关于objective-c - 这是 Objective-C 协议(protocol)的正确使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com