无法在 Swift 中调用 Objective-C 方法
Cannot invoke an Objective-C method in Swift
我正在尝试重写 Swift 中的 Objective-C 代码示例。代码基本上是使用CorePlot画图,写在Objective-C中(样本来自here)。这是一段原始的 Objective-C 代码:
CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
[xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.1f)];
我这样重写:
var xRange = plotSpace.plotRangeForCoordinate(CPTCoordinate.X).mutableCopy() as CPTMutablePlotRange;
xRange.expandRangeByFactor(NSDecimalNumber(1.1))
在这一点上我有一个编译错误说“CPTMutablePlotRage does not have a member named 'expandRangeByFactor'
”。有人知道我做错了什么吗?我检查了 Objective-C 代码,CTMutablePotRange 肯定有一个方法叫做 expandRangeByFactor.
谢谢。
expandRangeByFactor
存在,但它需要一个 NSDecimal。您正在尝试提供一个 NSDecimalNumber,这不是一回事。 (您的代码的另一个问题 - 在这种情况下无关紧要,但仍然是一个问题 - 是您不能说 NSDecimalNumber(1.1)
。没有这样的初始化程序。)
这里需要传递一个NSDecimal参数。这就是为什么原始 Objective-C 代码调用 Core Plot 函数 CPTDecimalFromCGFloat()
- 以生成此处的 NSDecimal。
但是,您不能在 Swift 中这样做,因为它不知道 NSDecimal。因此,无论您做什么,Swift 都看不到此方法,因为它看不到采用其无法处理的类型的值的方法。
Core Plot 的人都知道这个问题:请参阅 https://github.com/core-plot/core-plot/issues/96 The new release-2.0
branch contains a fix. As you can see here,在新的 API 中,您可以将 NSNumber 传递给 expandRangeByFactor
。
更新:Swift 1.2(在Xcode 6.3 及更高版本中可用)可以处理 NSDecimal。
我正在尝试重写 Swift 中的 Objective-C 代码示例。代码基本上是使用CorePlot画图,写在Objective-C中(样本来自here)。这是一段原始的 Objective-C 代码:
CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
[xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.1f)];
我这样重写:
var xRange = plotSpace.plotRangeForCoordinate(CPTCoordinate.X).mutableCopy() as CPTMutablePlotRange;
xRange.expandRangeByFactor(NSDecimalNumber(1.1))
在这一点上我有一个编译错误说“CPTMutablePlotRage does not have a member named 'expandRangeByFactor'
”。有人知道我做错了什么吗?我检查了 Objective-C 代码,CTMutablePotRange 肯定有一个方法叫做 expandRangeByFactor.
谢谢。
expandRangeByFactor
存在,但它需要一个 NSDecimal。您正在尝试提供一个 NSDecimalNumber,这不是一回事。 (您的代码的另一个问题 - 在这种情况下无关紧要,但仍然是一个问题 - 是您不能说 NSDecimalNumber(1.1)
。没有这样的初始化程序。)
这里需要传递一个NSDecimal参数。这就是为什么原始 Objective-C 代码调用 Core Plot 函数 CPTDecimalFromCGFloat()
- 以生成此处的 NSDecimal。
但是,您不能在 Swift 中这样做,因为它不知道 NSDecimal。因此,无论您做什么,Swift 都看不到此方法,因为它看不到采用其无法处理的类型的值的方法。
Core Plot 的人都知道这个问题:请参阅 https://github.com/core-plot/core-plot/issues/96 The new release-2.0
branch contains a fix. As you can see here,在新的 API 中,您可以将 NSNumber 传递给 expandRangeByFactor
。
更新:Swift 1.2(在Xcode 6.3 及更高版本中可用)可以处理 NSDecimal。