我很长一段时间以来一直是程序员程序员,我的大部分iOS代码都是用很多if语句而不是子类编写的。我想我终于明白了如何编写面向对象的代码,但我有几个问题。
我有一个类,ScoringToolbar.m,用于我的所有游戏。它会为屏幕底部创建按钮。根据游戏和游戏中的选项,创建哪些按钮会有所不同。这是一个典型的屏幕。
现在它是一系列if语句。除了难以阅读之外,它绝对不是适当的面向对象编程。我想做的是将类转换为超类并为每个游戏添加一个子类。我的第一个问题是:是否存在命名超类的约定?
另外,我想为每个子类保留ScoringToolbar.m名称。如果我为每个应用程序(或类似应用程序组)创建一个子类,我可以将if语句中的代码移动到其中。然后每个应用程序将调用自己的子类并创建它需要的按钮。如果我这样做,我将不必更改任何调用代码。但是,如果我有很多具有相同名称的.m文件,我该如何处理.h文件。我是否只有一个,并确保它适用于所有.m的。或者有没有办法告诉Xcode在应用程序中使用特定的.h文件?
或者这完全是错误的做法?
答案 0 :(得分:0)
我不确定子类化是你最好的选择。您关于具有相同名称的多个.m文件的问题表明此方法可能会令人困惑。您可能希望将ScoringToolbar视为应用程序根据其需求进行配置的控件。通过这种方式,它与UIButton不会有太大的不同。每个应用程序都将负责创建ScoringToolbar的实例并将其设置为适合。它可以在现有类或辅助类中的方法中执行此操作。 ScoringToolbar负责呈现UI(图标,颜色),同时调用应用程序指示需要哪些选项(上/下投票,数字正确/不正确等)。
答案 1 :(得分:0)
我认为子类化对你来说不是一个好选择。当您的应用程序或应用程序没有变大时,您将最终得到难以维护和修改的代码。
看看一些设计模式,如果我正确地解决了你的问题,那么构建器模式将是其中一个选项。
或者您可以为每个游戏创建配置文件。例如,您可以在plist中拥有一组字典。每个字典都代表工具栏中的UI元素。例如,您可以在plist中存储图像名称,顺序,选择器,位置(?)等。加载应用程序时,您可以使用字典选项在运行时创建工具栏元素。
这些只是一个起点,但根据您的应用要求和可扩展性,您可以找到更好的解决方案。