如何使用 NSLog 输出自定义类型的值?

How to output values of a custom type using NSLog?

背景

我正在使用 VES 在 iOS 设备上利用 Kiwi 点云查看器。

错误

vesVector3f v = self->mKiwiApp->cameraFocalPoint();
NSLog(@"%@",  v);

结果

Cannot pass non-POD object of type `vesVector3f` (aka 'Matrix<float, 3, 1>') to variadic function; expected type from format string was 'id'

问题

我知道 NSLog 应该输出 id 类型的对象。如何让 NSLog 输出类型 vesVector3f

额外详情

以下是我发现的有关自定义类型的一些详细信息。看起来 Vector3f 是一个包含 3 个浮点数的向量。

解决方案

根据 trojanfoe 的评论:

NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0));

这看起来像 Objective-C++,因为 Eigen 是一个 C++ 库。

您需要像这样打印每个 float 成员变量:

NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0));

我说 "something like this" 因为我从未使用过 Eigen。

您只能将 %@ 与 Objective-C class 一起使用,您可以在其中重写 description 方法以使其按您的喜好工作。

How do I get NSLog to output type vesVector3f ?

它需要是一个对象,正如错误消息告诉您的那样。如果是struct,则不能通过NSLog直接输出。您可以自己单独输出三个浮点数。但是,如果您要经常这样做,例如,您可以编写一个例程,将三个浮点数转换为一个字符串并输出该字符串。这就是像 NSStringFromCGVector 这样的内置例程所做的。