【问题标题】:Using one method in place of many用一种方法代替多种方法
【发布时间】:2023-03-17 10:07:01
【问题描述】:

我正在尝试学习 iOS 的 Objective-C。我已经尝试对此进行研究,但我一定没有使用正确的关键字。

我有几个简单命名的标签,Label1、Label2 等。除了 Label# 更改之外,我还有大量看起来基本相同的代码。我可以构建一种方法并将数字传递给它并显着缩小我的应用程序吗?

【问题讨论】:

    标签: ios objective-c objectid object-identity


    【解决方案1】:

    您可能希望将这些对象放在 NSArray 或其他类型的集合中。然后,您将能够遍历内容并对每个元素执行相同的操作。

    【讨论】:

    • 谢谢。当您说“或其他类型的集合”时,除了数组之外,还有哪些其他类型?
    【解决方案2】:

    考虑定义一个新类 CisonLabel,它抽象出这些标签的共享行为。 CisonLabel 保存控件及其相关数据。所以你会说

      CisonLabel *label1=[CisonLabel for: self.labelControl1 withIdentifier: 1];
      CisonLabel *label2=[CisonLabel for: self.labelControl2 withIdentifier: 2];
    

    CisonLabel 有如下方法:

     - (void) update;  // sets the label text, based on the identifier
    

    正如 DRiis 建议的那样,您可以将所有 CisonLabels 收集到一个集合中,也许是一个 NSArray。

     - (void) updateLabels: (NSArray*) theLabels
     {
         for(CisonLabel *label in theLabels) [label update]; 
     }
    

    您的直觉是正确的:将共享行为抽象到一个类中,并避免重复自己。

    【讨论】:

    • 非常感谢,但我对你的回答有点困惑马克。第一种方法更新一个标签,而第二种方法更新所有标签?在第一种方法中,标识符是否被理解?就像您在调用该方法时发送的参数一样?其次,因为标签都在新类中,它会自动对它们执行“更新”方法吗?请澄清。
    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多