1

私は色設定の辞書を持っていて、これを試しました:

#define ColorWithString( x) [UIColor #x]

NSDictionary *settings = @{@"color" : @"whiteColor"};
UIColor *color = ColorWithString(settings[@"color"]);

エラーが発生しますExpected identifier

文字列の前処理には微妙な点があることを私は知っています。たぶん、動的メッセージをクラスに送信することさえ不可能です。これを機能させるための提案はありますか?

4

2 に答える 2

4

マクロが何に拡張されるかを見てみましょう。

UIColor *color = [UIColor settings[@"color"]];

それは明らかに合法的なObjective-Cコードではありません。私はあなたがperformSelector:組み合わせて使用​​できると思いますNSSelectorFromString

UIColor *color = [UIColor performSelector:
    NSSelectorFromString(settings[@"color"])];

…でも、これを単純にやってみませんか?

NSDictionary *colors = @{
    @"white" : [UIColor whiteColor],
    @"red"   : [UIColor redColor]
};
于 2012-11-01T08:40:05.957 に答える
2

マクロをに変更します

#define ColorWithString( x) [UIColor performSelector:NSSelectorFromString(x)]

そして、あなたはマクロを次のように使うことができます

        NSDictionary *settings = @{@"color" : @"greenColor"};        
        UIColor *color = ColorWithString(settings[@"color"]);

から取得するCGColorRefにはUIColor

CGColorRef colorRef = color.CGColor;
于 2012-11-01T08:53:41.967 に答える