Encoding CGPoint struct with NSCoder

后端 未结 3 954
别跟我提以往
别跟我提以往 2021-02-07 10:19

How do you encode and decode a CGPoint struct using NSCoder?

3条回答
  •  囚心锁ツ
    2021-02-07 10:50

    CGPoints and NSPoints are both structures composed of two CGFloat values, so you can freely pass them around as each other. The quick and dirty way would be:

    NSCoder *myNSCoder;
    CGPoint myPoint;
    [myNSCoder encodePoint:*(NSPoint *)myPoint];
    

    This will usually work, but it technically breaks the C99 strict aliasing rules. If you want to be 100% compatible with the standard, you'll have to do something like:

    typedef union
    {
      CGPoint cgPoint;
      NSPoint nsPoint;
    } CGNSPoint;
    
    CGNSPoint cgnsPoint = { .cgPoint = myPoint };
    [myNSCoder encodePoint:cgnsPoint.nsPoint];
    

提交回复
热议问题