我正在尝试在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);
还有其他人看到过这样的错误吗?有任何修复建议吗?
P.S。我不太确定该怎么称呼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") })
答案 0 :(得分:1)
是的,这是一个函数指针。这是C interoperability的当前限制:
请注意,C函数指针不会在Swift中导入。
如果您愿意,可以考虑filing a bug。 (请注意,基于块的API很好,可以使用Swift闭包。)