1

このソースのこれらのコード行を使用したい

#define TEXTVIEW_SET_HTML_TEXT(__textView__, __text__)\
do\
{\
    if ([__textView__ respondsToSelector: NSSelectorFromString(@"setContentToHTMLString:")])\
        [__textView__ performSelector: NSSelectorFromString(@"setContentToHTMLString:") withObject: __text__];\
    else\
        __textView__.text = __text__;\
}\
while (0)

#define TEXTVIEW_GET_HTML_TEXT(__textView__, __text__)\
do\
{\
    if ([__textView__ respondsToSelector: NSSelectorFromString(@"contentAsHTMLString")])\
        __text__ = [__textView__ performSelector: NSSelectorFromString(@"contentAsHTMLString") withObject: nil];\
    else\
        __text__ = __textView__.text;\
}\
while (0)

私は何をすべきか?マクロ初心者です。名前で uitextview 変数を定義する必要があります__textView__か?? このコードを使用するための基本的な手順を教えてもらえますか?

4

1 に答える 1

3

@implementation次のように、マクロを の外に置くだけです。

#import "..."

// Put the macros here

// This block may or may not be present in your code...
@interface YourClass ()

@end
// ... up to here.

@implementation YourClass

@end

変数はマクロで既に宣言されているため、宣言する必要はありません。次のように考えることができます。

#define TEXTVIEW_SET_HTML_TEXT(__textView__, __text__)\
do\
{\
    if ([__textView__ respondsToSelector: NSSelectorFromString(@"setContentToHTMLString:")])\
        [__textView__ performSelector: NSSelectorFromString(@"setContentToHTMLString:") withObject: __text__];\
    else\
        __textView__.text = __text__;\
}\
while (0)

この C スタイルの関数として:

void TEXTVIEW_SET_HTML_TEXT(UITextView *__textView__, NSString *__text__)
{
    do
    {
        if ([__textView__ respondsToSelector: NSSelectorFromString(@"setContentToHTMLString:")])
            [__textView__ performSelector: NSSelectorFromString(@"setContentToHTMLString:") withObject: __text__];
        else
            __textView__.text = __text__;
    }
    while (0);
}

違いは、C スタイル関数として宣言した場合、コンパイル/リンク時にアプリに含まれることです。ただし、#defined だったので、do-whileコンパイルする前にコンパイラが最初に変更することを意味します。

次のように呼び出します。

- (void)yourMethodThatWillChangeTheText
{
    // ...
    TEXTVIEW_SET_HTML_TEXT(self.myTextView, @"Hello");
    // ...
}

追加情報として、#define通常、次のような定数を定義するために使用されます。

#define PI_VALUE 3.141592

次のような名前にする必要があります。

double circumference = 2 * PI_VALUE * radius;

しかし、マクロに見られるように、それは関数として見える/使用されることもできます。したがって、マクロ / がどの#defineように見えるかを考慮して、適切に呼び出していることを確認する必要があります。

于 2012-12-12T07:33:36.523 に答える