0

ColourUtils.h次のコードを含む名前のファイルがあります。これは、 16進文字列を色に変換するものです

#import <Foundation/Foundation.h>

@interface ColourUtils : NSObject

+ (UIColor *) colorWithHexString: (NSString *) hex;

@end

@implementation ColourUtils

+ (UIColor *) colorWithHexString: (NSString *) hex  
{  
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];  

    // String should be 6 or 8 characters  
    if ([cString length] < 6) return [UIColor grayColor];  

    // strip 0X if it appears  
    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];  

    if ([cString length] != 6) return  [UIColor grayColor];  

    // Separate into r, g, b substrings  
    NSRange range;  
    range.location = 0;  
    range.length = 2;  
    NSString *rString = [cString substringWithRange:range];  

    range.location = 2;  
    NSString *gString = [cString substringWithRange:range];  

    range.location = 4;  
    NSString *bString = [cString substringWithRange:range];  

    // Scan values  
    unsigned int r, g, b;  
    [[NSScanner scannerWithString:rString] scanHexInt:&r];  
    [[NSScanner scannerWithString:gString] scanHexInt:&g];  
    [[NSScanner scannerWithString:bString] scanHexInt:&b];  

    return [UIColor colorWithRed:((float) r / 255.0f)  
                           green:((float) g / 255.0f)  
                            blue:((float) b / 255.0f)  
                           alpha:1.0f];  
} 

@end

両方ともこのクラスを使用する必要がある2つのViewControllerがあります(のUIを装飾するためviewDidLoad)。両方の.hファイルで、これをインポートしました:#import "ColourUtils.h"

ただし、コンパイル時に次のエラーが発生します。

ld: duplicate symbol _OBJC_METACLASS_$_ColourUtils in ...

この一般的なメソッドを複数のViewControllerに含めることができる最良の方法は何ですか?私はJavaのバックグラウンドを持っているので、静的メソッドと一部のインポートは問題ありませんが、Objective-Cでは同じようには機能しないようです。

4

1 に答える 1

3

@implementationクラスの一部を.hファイルに入れないでください。.hは、他のクラスが使用できるパブリックメソッドとプロパティを知るために必要なクラスインターフェイスの宣言にのみ使用する必要があります。他の人が知る必要のないクラスの部分(実装とプライベート宣言)に一致する.mファイルを作成します。

于 2012-06-07T15:17:38.977 に答える