objective-c - Swift 中未找到 PRTweenOperation TimingFunction 成员

标签 objective-c swift

我正在尝试在 Swift iPhone 应用程序中使用 PRTween 库。

来自 GitHub 的原始示例代码:

PRTweenPeriod *period = [PRTweenPeriod periodWithStartValue:100 endValue:200 duration:3];
PRTweenOperation *operation = [[PRTweenOperation new] autorelease];
operation.period = period;
operation.target = self;
operation.timingFunction = &PRTweenTimingFunctionLinear;

我的 Swift 端口:

var period = PRTweenPeriod.periodWithStartValue(100, endValue: 200, duration: 3) as PRTweenPeriod
var operation = PRTweenOperation()
operation.period = period
operation.target = self
operation.timingFunction = PRTweenTimingFunctionLinear

Xcode 给我这个错误:

'PRTweenOperation' does not have a member named 'timingFunction'

我不知道如何解决这个问题。我可以清楚地看到PRTween.h中的成员定义。我认为这可能与 PRTweenTimingFunction 的定义所带的事实有关。

typedef CGFloat(*PRTweenTimingFunction)(CGFloat, CGFloat, CGFloat, CGFloat);

还有其他人见过这样的错误吗?有修复建议吗?

附注我不太确定如何称呼该 typedef。它是一个函数指针吗?

编辑

作为解决方法,我使用了不要求计时函数的代码:

let period = PRTweenPeriod.periodWithStartValue(100, endValue: 200, duration: 2) as PRTweenPeriod

PRTween.sharedInstance().addTweenPeriod(period, 
    updateBlock: { (p: PRTweenPeriod!) in
        NSLog("\(Int(p.tweenedValue))"
    }, 
    completionBlock: { NSLog("Completed tween") })

最佳答案

是的,这是一个函数指针。这是 C interoperability 的当前限制。 :

Note that C function pointers are not imported in Swift.

您可能会考虑filing a bug如果你想让这个工作。 (请注意,基于 block 的 API 很好,并且可以与 Swift 闭包配合使用。)

关于objective-c - Swift 中未找到 PRTweenOperation TimingFunction 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541746/

相关文章:

iPhone SDK : [MobileOfferViewController _shouldUseKeyWindowStack]

objective-c - Apple 是否提供任何库或 API 来操作 CalDAV?

ios - 在 iOS9 swift 中选择特定行更新核心数据数据库

swift - 无法在 Swift 中初始化模型

ios - 是否可以为每个部分设置单元格背景颜色?

objective-c - 处理核心数据模型对象的效率

objective-c - indexOfObject 不正确匹配

ios - Core-Data 不保存在异步调用中

ios - 仅要求 iAP 购买一次

ios - 加载时从 NSUserDefault 加载开关状态