无法在 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: 期望其参数类型为 IntUnsafeMutablePointer&lt;Float&gt;

所以你应该将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”的主要内容,如果未能解决你的问题,请参考以下文章

无法将 iSpeech 导入我的 iOS Swift 项目

在oc代码中使用swift第三方框架

Swift - 计时器无法访问更新的实例属性

无法在 Swift 2 中使用参数列表调用“sendAsynchronousRequest”

super.init() 无法在 swift3 中调用

无法在目标 C 中调用 swift 函数。获取 NSObject 的错误接口声明