在Objective-C中,我的动画位看起来像这样:
[UIView animateWithDuration:0.5 animations:^{ [[[_storedCells lastObject] topLayerView] setFrame:CGRectMake(0, 0, swipeableCell.bounds.size.width, swipeableCell.bounds.size.height)]; } completion:^(BOOL finished) { [_storedCells removeLastObject]; }];
如果我将其翻译成Swift,它应该看起来像这样:
UIView.animateWithDuration(0.5, animations: { self.storedCells[1].topLayerView.frame = CGRectMake(0, 0, cell.bounds.size.width, cell.bounds.size.height) }, completion: { (finished: Bool) in //self.storedCells.removeAtIndex(1) })
它在注释行上抱怨。我收到的错误是:Could not find an overload for 'animateWithDuration' that accepts the supplied arguments
Could not find an overload for 'animateWithDuration' that accepts the supplied arguments
我知道完成闭包需要一个布尔值并返回一个空值,但是我应该能够写一些与布尔不相关的东西……对吗?
任何帮助表示赞赏。
编辑 :这是我如何在函数中声明使用的数组:
var storedCells = SwipeableCell[]()
接受SwipeableCell对象的数组。
这是一个很好的,棘手的!
问题出在您的完成区块中…
答 :首先,我要像这样重写它:( 不是最终答案,而是在路上!)
{ _ in self.storedCells.removeAtIndex(1) }
(_代替“成品” Bool,以向读者表明其值未在块中使用-您也可以考虑在必要时添加捕获列表,以防止强大的参考周期)
_
B.您编写的闭包在不应该使用的情况下具有返回类型!多亏了Swift的便捷功能 “从单个表达式闭包中隐式返回” -您正在返回该表达式的结果,这是给定索引处的元素
(闭包参数的类型completion应该是[[Bool)-> Void))
completion
可以这样解决:
{ _ in self.storedCells.removeAtIndex(1); return () }