重用类最佳实践

Posted

技术标签:

【中文标题】重用类最佳实践【英文标题】:Reusing class best practice 【发布时间】:2013-05-10 18:41:06 【问题描述】:

我的 UIView (ClassA) 有一个按钮,按下时会显示另一个 UIView (ColorClass),它有 3 个允许用户选择颜色的按钮。选择的颜色会传回 ClassA 以便可以使用。它也被传递给一个Storage(一个单例)类来保存选择的颜色。

这很好用,但是现在,我需要第二个不相关的类 ClassB,以具有相同的功能。但是,当我从 ClassB 内部调用通常在 ClassA 中调用的相同方法时,ClassA 是更新的方法。

如何使 ColorClass 对调用类更加不可知?我还在学习,所以如果有人能帮助我指出正确的方向,那就太好了。

A 类

- (void) showColorPicker
    CGRect colorPickerFrame = CGRectMake(150, 100, 237, 215);
colorPicker= [[ColorClass alloc] initWithFrame:colorPickerFrame];
    colorPicker.vc = self;
    [self.view insertSubview:colorPicker aboveSubview:self.view];


- (void) setTheButtonColor : (int) c 

    Sufficient to say this just changes the buttons background color selected from a list of colors 

颜色类

当按下选定的颜色时,我调用此方法向 ClassA 发送颜色消息。

- (void) buttonPressed : (id) sender 
        [self.vc setButtonColor:[sender tag]];
    [myStorage setButtonColor:[sender tag]];

【问题讨论】:

【参考方案1】:

您需要使用delegation - 就像您为UITableView 提供数据时,它并不确切知道您的类是什么,只是它实现了指定的@protocol

定义您自己的协议来描述所提供的回调(这在 ColorClass.h 中):

@protocol ColorClassDelegate < NSObject >

- (void)colorPicker:(ColorClass *)colorPicker didPickColor:(UIColor *)color;

@end

然后在您的 ColorClass(同样是 .h 文件)中,您有一个代表的属性:

@property (weak, nonatomic) id < ColorClassDelegate > delegate;

选择颜色后(按下按钮):

- (void) buttonPressed : (id) sender 
    // delegate
    [self.delegate colorPicker:self didPickColor:   ## get the colour here ##   ];

    // persistent store
    [myStorage setButtonColor:[sender tag]];

并且任何使用颜色选择器的类都实现了ColorClassDelegate 协议

#import "ColorClass.h"

@interface ClassA < ColorClassDelegate >

并将自己设置为颜色选择器委托。然后它实现:

- (void)colorPicker:(ColorClass *)colorPicker didPickColor:(UIColor *)color


    // do something with the colour


您的原始代码正在传递按钮标签来表示颜色。您可以这样做,而不是在委托方法中传递颜色。

【讨论】:

我还需要用你的方法@class ViewController吗?这是我知道如何在类之间发送消息的唯一方法。我非常感谢您的帮助。是否可以在 xcode 中创建样板文件?我了解发生了什么我只是不了解整体实施。 非常感谢!当您告诉我有关 delegates 的信息时,我在 Google 上搜索并找到了这篇很棒的文章!你让我今天很开心! iosdevelopertips.com/objective-c/…【参考方案2】:

另一种可能比委托少一些但松耦合的解决方案是使用 NSNotification

并在选择颜色时发出通知。

如果您想要一些我可以提供的示例代码,但 NSNotification 非常困难。

【讨论】:

以上是关于重用类最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在实际生产项目中部署(管理依赖)django 可重用应用程序的最佳实践是啥?

Angular 最佳实践:为了可重用性,创建新的 CSS 类或新组件?

Dubbo服务化最佳实践

CakePHP 上传文件的最佳实践

Swift 中全局变量和函数的最佳实践是啥?

Android strings.xml 最佳实践? [关闭]