これは簡単なはずです…と思いますが、Struct変数をNSObject
にラップする方法を見つけることができません。そうする方法はありますか?そうでない場合、NSMutableArray
に構造体を追加するにはどうすればよいですか?
ありがとう。
https://developer.Apple.com/documentation/foundation/nsvalue で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にすることができます
このようなものはカテゴリになるでしょう @ 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];
+ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;
を使用します
ドキュメントから:「指定されたCoreGraphicsアフィン変換構造を含む新しい値オブジェクトを作成します。」
CGAffineTransform fooAffineTransform = CGAffineTransformMakeScale(.5, .5);
[NSValue valueWithCGAffineTransform:fooAffineTransform];
+ valueWithCGAffineTransformはiOS 2.0から存在しています。