0

私はObjective-Cに非常に慣れていません。私はこれに問題がありました:

NS_ENUM(NSUInteger, SetOfValues)
{ 
    firstRow = 0,
    secondRow,
    thirdRow,
    rowCount
};

ここで、実装でこれらの変数を変更する必要があります。

@implementation BillyBurroughs 
...

- (void) modifyrowInformation
{
    secondRow = 0;
    thirdRow = 1;
    rowCount = 2
}

@end

しかしもちろん、値を割り当てることができないというエラーが表示されます。これで、次のように変数をローカル変数に単純に読み取ることができます

+ (void) initialize {
    localFirstRow = 0 
    ...
}

それらを変更しますが、余分な変数なしでこれを行うためのよりクリーンで怠惰な方法はありますか? これが非常に基本的な質問である場合は申し訳ありません。ご意見をお待ちしております。

4

1 に答える 1

1

列挙型は定数です。その値を変更することはできません。なぜ変更したいのですか? それがivarの目的です。

NS_ENUM次のようなものに展開されます。

typedef enum {
    firstRow = 0,
    secondRow,
    thirdRow,
    rowCount,
} SetOfValues;

注意:指定しない限り、最初の要素はデフォルトで 0 に初期化されます。

また、競合を避けるために列挙型に名前を付けるのも良い方法です。リンゴの実装を見て、それを自分のユースケースに適用してみてください:

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
    UITableViewCellStyleDefault,
    UITableViewCellStyleValue1,
    UITableViewCellStyleValue2,
    UITableViewCellStyleSubtitle
};

おそらく、探しているのはプロパティまたは配列ですか?

array = @[ @1, @2, @3, @4 ];

コメントの質問を編集:

実装ファイル (.m) で、プライベート ヘッダーを作成できます。

@interface OKAClass ()
  @property (nonatomic, assign) NSUInteger property;
@end

selfまたはを使用して、そのクラス内からプロパティにアクセスできます。_property

例えば

self.property = 1;

また

_property = 1;

違いはself.property、生成されたアクセサーを使用し、おそらく使用したいものであることです。これは、ゲッター/セッターをオーバーライドして別の値を更新する場合に備えて、将来的に証明されます。

于 2014-03-14T23:12:52.573 に答える