如何在Objective-C中创建协议

时间:2012-07-30 21:12:25

标签: objective-c protocols

我想创建一个Utils文件,有一些函数并在某些类中使用它们,但我不知道该怎么做。

我有:

Utils.h

#import <Foundation/Foundation.h>

@protocol Utils 

@optional

-(NSString*)colorToHex:(UIColor*)color;

@end

@interface Utils : NSObject 

@end

Utils.m

#import "Utils.h"

@implementation Utils

-(NSString*)colorToHex:(UIColor*)color{
    return @"Working";
}

@end

mainClass.h(摘录)

@interface StyleTableViewController : UITableViewController <Utils>

mainClass.m(电话)

NSString *myString = [self colorToHex:color];
NSLog(@"%@",myString);

它在调用函数时崩溃了。我该怎么办?

由于

2 个答案:

答案 0 :(得分:2)

当您声明您的类符合协议(通过添加)时,您告诉编译器此类实现协议中定义的所有方法。 协议不是一个类 - 它只是一个方法列表。因此,在您的代码中,您有一个协议调用Utils,以及一个名为Utils的类。你符合协议,但没有实现方法,这就是当你试图调用colorToHex时程序崩溃的原因。 在您的情况下,您需要做的是在StyleTableViewController中创建一个Util对象,并使用它来调用colorToHex方法,或者将colorToHex方法作为类方法,并在需要时从Util类中调用它。另一种选择是使StyleTableViewController成为Utils的子类,但我怀疑这将是一个很好的设计。

答案 1 :(得分:1)

另一种选择是将类别Utils添加到UIColor。不完全是你要求的,但它比使用协议更优雅地解决了你的问题。