Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在objective-C中创建协议_Objective C_Protocols - Fatal编程技术网

如何在objective-C中创建协议

如何在objective-C中创建协议,objective-c,protocols,Objective C,Protocols,我想创建一个Utils文件,拥有一些函数并在一些类中使用它们,但我不知道如何做到这一点 我有: Utils.h #import <Foundation/Foundation.h> @protocol Utils @optional -(NSString*)colorToHex:(UIColor*)color; @end @interface Utils : NSObject @end mainClass.h(代码段) 当它调用函数时崩溃。我该怎么办 感谢当您声明您的

我想创建一个Utils文件,拥有一些函数并在一些类中使用它们,但我不知道如何做到这一点

我有:

Utils.h

#import <Foundation/Foundation.h>

@protocol Utils 

@optional

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

@end

@interface Utils : NSObject 

@end
mainClass.h(代码段)

当它调用函数时崩溃。我该怎么办


感谢

当您声明您的类符合协议(通过添加)时,您会告诉编译器该类实现协议中定义的所有方法。 协议不是一个类,它只是一个方法列表。所以在代码中,有一个协议调用Utils,还有一个类叫做Utils。您遵守了协议,但没有实现这些方法,这就是为什么当您试图调用colorToHex时程序崩溃的原因。
在本例中,您需要做的是在StyleTableViewController中创建一个Util对象,并使用它调用colorToHex方法,或者使colorToHex方法成为类方法,并在需要时从Util类调用它。另一种选择是使StyleTableViewController成为UTIL的子类,但我怀疑这是一种好的设计。

当您声明您的类符合协议(通过添加)时,您会告诉编译器该类实现协议中定义的所有方法。 协议不是一个类,它只是一个方法列表。所以在代码中,有一个协议调用Utils,还有一个类叫做Utils。您遵守了协议,但没有实现这些方法,这就是为什么当您试图调用colorToHex时程序崩溃的原因。
在本例中,您需要做的是在StyleTableViewController中创建一个Util对象,并使用它调用colorToHex方法,或者使colorToHex方法成为类方法,并在需要时从Util类调用它。另一个选择是使StyleTableViewController成为UTIL的子类,但我怀疑这是一个好的设计。

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

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

我不确定您要做什么以及这与协议有什么关系?我不确定您要做什么以及这与协议有什么关系?我完全不了解协议的用法,谢谢您的解释!我根本不懂协议的用法,谢谢你的解释!
#import "Utils.h"

@implementation Utils

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

@end
@interface StyleTableViewController : UITableViewController <Utils>
NSString *myString = [self colorToHex:color];
NSLog(@"%@",myString);