次のような構造体であるプロパティを持つオブジェクトがあります。
struct someStruct{
float32 x, y;
};
そして、私がやりたいのは、文字列を介してそのstructプロパティのゲッターを呼び出すことです。
id returnValue = [theObject performSelector:NSSelectorFromString(@"thePropertyName")];
ただし、ご覧のとおり、「performSelector:」は構造体ではなくオブジェクトを返します。私は思いつく限りのキャスティングの方法を試しましたが、役に立たなかったので、何かが足りないと思いました-おそらく簡単なもの...
returnValueを構造体に戻す方法についてのアイデアはありますか?ありがとう!
編集:元の応答者が誰であったか(彼はその後何らかの理由で彼の投稿を削除しました)-あなたは正しかった:あなたの答えに基づいて、以下は機能します:
StructType s = ((StructType(*)(id, SEL, NSString*))objc_msgSend_stret)(theObject, NSSelectorFromString(@"thePropertyName"), nil);
編集2:問題のかなり詳細な外観はここにあります。
編集3:対称性のために、文字列名で構造体プロパティを設定する方法を次に示します(これは、受け入れられた回答が設定を達成する方法とまったく同じですが、私の問題では、上記の最初の編集で述べたゲッターに対してわずかに異なるアプローチが必要でした):
NSValue* thisVal = [NSValue valueWithBytes: &thisStruct objCType: @encode(struct StructType)];
[theObject setValue:thisVal forKey:@"thePropertyName"];