如何实现NSNumber值而不是NSDecimal值?

时间:2017-02-07 23:26:58

标签: objective-c core-plot

我正在使用最新版本的CorePlot,我遇到了这个错误:

  

将'NSDecimal'发送到不兼容类型'NSNumber * _Nonnull'的参数

我意识到发生此错误是因为我的应用程序基于使用旧版CorePlot的教程。 This changelog说明了其中一项变化:

  

更改了所有采用NSDecimal值的公共属性和方法,以取代NSNumber值。在某些情况下,该方法的NSDecimal版本仍然存在,并且添加了一个采用NSNumber值的新版本。

     

Swift不支持NSDecimal值。使用NSNumber值有几个优点。 Swift根据需要自动将数值桥接到NSNumber。这也减少了使用NSDecimal包装函数的需要,例如CPTDecimalFromDouble()来转换Objective-C中的值。如果特定值需要更高的精度,请使用NSDecimalNumber来维持完整的小数精度。

因此,我知道我的错误是由什么引起的,但我不知道如何解决它。有任何想法吗?这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    CPTGraphHostingView* hostView = [[CPTGraphHostingView alloc] initWithFrame:self.view.frame];
    [self.view addSubview: hostView];

    CPTGraph* graph = [[CPTXYGraph alloc] initWithFrame:hostView.bounds];
    hostView.hostedGraph = graph;

    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;

    [plotSpace setYRange: [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat( 0 ) length:CPTDecimalFromFloat( 16 )]];
    [plotSpace setXRange: [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat( -4 ) length:CPTDecimalFromFloat( 8 )]];

    CPTScatterPlot* plot = [[CPTScatterPlot alloc] initWithFrame:CGRectZero];

    plot.dataSource = self;

    [graph addPlot:plot toPlotSpace:graph.defaultPlotSpace];
}

1 个答案:

答案 0 :(得分:2)

使用NSNumber个对象代替NSDecimals:

[plotSpace setYRange: [CPTPlotRange plotRangeWithLocation:@0 length:@16]];
[plotSpace setXRange: [CPTPlotRange plotRangeWithLocation:@-4 length:@8]];

如果您需要将NSDecimal转换为NSNumber,可以使用NSDecimalNumber

NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithDecimal:someDecimal];