clang 的扩展属性 objc_boxable
支持把结构体声明为可打包,这样结构体就可以使用打包语法转换为 NSValue
类型。
本质上是语法糖。
举个例子:
typedef struct __attribute__((objc_boxable)) CBox {
double x, y, z;
} CBox;
NSValue *box = @(CBox{ 12.34, 23.45, 34.56 });
CBox value;
[box getValue:&value];
需要注意的是,结构体中的成员不能是 ObjC 的类型,否则会报 Non-trivially copyable type 'CBox' cannot be used in a boxed expression
编译错误。
参考资料
https://clang.llvm.org/docs/ObjectiveCLiterals.html#boxed-c-structures