2012-07-30 33 views
0

我想創建一個Utils文件,有一些功能並在某些類中使用它們,但我不知道如何去做。如何在目標中創建一個協議-C

我:

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

我不確定你想要做什麼以及這與協議有什麼關係? – starbugs 2012-07-30 21:19:17

回答

2

當你的國家,你的類遵循的協議(加入),你告訴該類實現在協議中定義的所有方法的編譯器。 協議不是一個類 - 它只是一個方法列表。所以在你的代碼中,你有一個協議調用Utils和一個名爲Utils的類。您遵守協議,但沒有實現這些方法,這就是爲什麼當您嘗試調用colorToHex時程序崩潰。 你需要做的是在你的StyleTableViewController中創建一個Util對象,並用它來調用colorToHex方法,或者使colorToHex方法成爲一個類方法,並在需要時從Util類調用它。另一種選擇是將StyleTableViewController作爲Utils的一個子類,但我懷疑這是否是一個好設計。

+0

我完全不理解協議的使用,感謝解釋! – Sylphos 2012-07-30 23:30:12

1

另一種選擇是將類別Utils添加到UIColor。不完全是你所要求的,但它比使用協議更加優雅地解決了你的問題。