これはポインタで動作します:
CGVector* v = {1, 2};
CGPoint* p = (CGPoint*)v;
ここではポインターではないため、これは機能しませんが、これは典型的なケースです。
CGVector v = {1, 2};
CGPoint p = (CGPoint)v;
それでも、両方の構造体が同じサイズ (2x CGFloat) であるため、CGVector を CGPoint に「キャスト」する方法はありますか。 ?
これはポインタで動作します:
CGVector* v = {1, 2};
CGPoint* p = (CGPoint*)v;
ここではポインターではないため、これは機能しませんが、これは典型的なケースです。
CGVector v = {1, 2};
CGPoint p = (CGPoint)v;
それでも、両方の構造体が同じサイズ (2x CGFloat) であるため、CGVector を CGPoint に「キャスト」する方法はありますか。 ?
dasblinkenlight のコードCGPoint p = *((CGPoint*)&v);
は、2 つのデータ構造が同じメモリ レイアウト/パディングなどを持っていると仮定して動作します。
ただし、このコードは引き続きメモリを新しい変数にコピーするため、安全な方法 (メンバーごとのコピー) を実行するよりもそれほど高速ではないことに注意してください。いずれにせよ、これらの種類のハッキーな最適化を決定する前に、Instruments を使用してください。
少なくとも、タイプ間で変換するマクロまたは関数を作成する必要があります。このハックを実行したい場合は、マクロ/関数で実行して、コードにあまり影響を与えずに後で変更できるようにします。