无法在 Swift 项目中调用“getControlPointAtIndex”
Posted
技术标签:
【中文标题】无法在 Swift 项目中调用“getControlPointAtIndex”【英文标题】:Cannot invoke 'getControlPointAtIndex' in Swift project 【发布时间】:2015-04-19 13:40:46 【问题描述】:我一直在尝试恢复 swift 早期编写的字幕文本脚本,并使其在 swift 1.2 中运行。我已经能够修复所有错误,除了一个错误,它出现在原作者提供的代码的最后一部分(他声明他将不再更新项目(@https://github.com/cbpowell/MarqueeLabel-Swift)。完整的编译器错误是, "不能使用类型为 '(Uint, values: inout [Float])' 的参数列表调用 'getControlPointAtIndex'。
func controlPoints() -> [CGPoint]
// Create point array to point to
var point: [Float] = [0.0, 0.0]
var pointArray = [CGPoint]()
for (var i: UInt = 0; i <= 3; i++)
self.getControlPointAtIndex(i, values: &point)
pointArray.append(CGPoint(x: CGFloat(point[0]), y: CGFloat(point[1])))
return pointArray
问题出现在'self.getControlPointAtIndex(i, values: &point) 行上,我已尽一切努力解决它。完整的文件文件在上面的链接中提供。
【问题讨论】:
【参考方案1】:根据 Apple 的文档,方法 getControlPointAtIndex:values:
期望其参数类型为 Int
和 UnsafeMutablePointer<Float>
。
所以你应该将UInt
更改为Int
并为point
分配一个指针,如下所示:
func controlPoints() -> [CGPoint]
// Create point array to point to
var point = UnsafeMutablePointer<Float>.alloc(2)
var pointArray = [CGPoint]()
for (var i: Int = 0; i <= 3; i++)
self.getControlPointAtIndex(i, values: point)
pointArray.append(CGPoint(x: CGFloat(point[0]), y: CGFloat(point[1])))
point.dealloc(2)
return pointArray
【讨论】:
这会导致“EXC_BAD_ACCESS(代码=1,地址=0x0)”崩溃。 您确定这是所提供代码的问题吗?也许,这是其他部分,Swift 1.2 的更改引入了!
,而?
会更合适?【参考方案2】:
在 Swift 2.1 中,以下代码应该可以按预期工作:
var controlPoint1: [Float] = [0,0]
function.getControlPointAtIndex(1, values: &controlPoint1)
【讨论】:
以上是关于无法在 Swift 项目中调用“getControlPointAtIndex”的主要内容,如果未能解决你的问题,请参考以下文章