Q:How 从 NSConcreteValue 获取 CGPoint?

Q:How to get CGPoint from NSConcreteValue?

我在我的项目中使用RAC来观察tableView's contentOffset,但我不知道如何提取x,因为id的类型是[=15] =]:

[RACObserve(_tableview, contentOffset)
        subscribeNext:^(id  x){

            float currentOffsetY = x.y; // this line is wrong code.

     }];

我参考了相关问题: Get value from KVO - returning NSConreteValue

您要查找的是 NSValue 上的 pointValue 属性。所以你只需要将 x 参数转换为 NSValue 因为 NSConcreteValueNSValue 的子类。然后您可以从 CGPoint 结构中提取所需的值。

背景资料

如果您想将 C 结构(例如 CGPointCGRect)视为 Objective-C 对象,例如将其添加到 NSArray,您需要将其包装在一个对象中。因此,Apple 在 NSValue 上提供了特殊的初始化程序和 getter。