我想创建一个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);
它在调用函数时崩溃了。我该怎么办?
由于
答案 0 :(得分:2)
当您声明您的类符合协议(通过添加)时,您告诉编译器此类实现协议中定义的所有方法。 协议不是一个类 - 它只是一个方法列表。因此,在您的代码中,您有一个协议调用Utils,以及一个名为Utils的类。你符合协议,但没有实现方法,这就是当你试图调用colorToHex时程序崩溃的原因。 在您的情况下,您需要做的是在StyleTableViewController中创建一个Util对象,并使用它来调用colorToHex方法,或者将colorToHex方法作为类方法,并在需要时从Util类中调用它。另一种选择是使StyleTableViewController成为Utils的子类,但我怀疑这将是一个很好的设计。
答案 1 :(得分:1)
另一种选择是将类别Utils
添加到UIColor
。不完全是你要求的,但它比使用协议更优雅地解决了你的问题。