39

これは些細なことだと思われます…私は思いますが、Struct変数をにラップする方法を見つけることができませんNSObject。そうする方法はありますか?そうでない場合、構造体をに追加するにはどうすればよいNSMutableArrayですか?

ありがとう。

4

3 に答える 3

83

うーん、https:NSValue //developer.apple.com/documentation/foundation/nsvalueで見てみてください

あなたはそれを次のように使うことができます

struct aStruct
{
    int a;
    int b;
};
typedef struct aStruct aStruct;

NSValue次に、次のようなオブジェクトに「ラップ」します。

aStruct struct; struct.a = 0; struct.b = 0;
NSValue *anObj = [NSValue value:&struct withObjCType:@encode(aStruct)];
NSArray *array = @[anObj];

構造体を使用から引き出すにはNSValue

NSValue *anObj = [array firstObject];
aStruct struct;
[anObj getValue:&struct];

後で、NSValueからカテゴリを作成して、それをより良くすることができると思います= D

于 2011-04-17T07:43:34.560 に答える
13

このようなものは、@Rpranataが話しているカテゴリになります:)

struct _Pair
{
    short val;
    short count;
};
typedef struct _Pair Pair;

@interface NSValue (Pair)
+ (id)valueWithPair:(Pair)pair;
- (Pair)pairValue;
@end

@implementation NSValue (Pair)
+ (id)valueWithPair:(Pair)pair
{
    return [NSValue value:&pair withObjCType:@encode(Pair)];
}
- (Pair)pairValue
{
    Pair pair; [self getValue:&pair]; return pair;
}
@end

使用法:

// Boxing
Pair pair; pair.val = 2; pair.count = 1;
NSValue *value = [NSValue valueWithPair:pair];

// Unboxing
NSValue value = ...
Pair anotherPair = [value pairValue];
于 2012-02-28T15:57:32.633 に答える
0

使用する+ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;

ドキュメントから:「指定されたCoreGraphicsアフィン変換構造を含む新しい値オブジェクトを作成します。」

CGAffineTransform fooAffineTransform = CGAffineTransformMakeScale(.5, .5);
[NSValue valueWithCGAffineTransform:fooAffineTransform];

+ valueWithCGAffineTransformは、iOS2.0以降に存在しています。

于 2015-05-06T02:09:38.413 に答える