草庐IT

closures - animateWithDuration:animations:completion: 在 Swift 中

coder 2023-07-17 原文

在 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

我知道完成闭包接受一个 bool 值并返回一个空值,但无论如何我应该能够写一些与 bool 无关的东西......对吧?

感谢任何帮助。

编辑:以下是我声明在函数中使用的数组的方式:

var storedCells = SwipeableCell[]()

采用 SwipeableCell 对象的数组。

最佳答案

这个不错,有技巧!

问题出在你的完成 block 中......

一个。我会像这样重写它:(不是最终答案,但在我们到达那里的路上!)

{ _ in self.storedCells.removeAtIndex(1) }

(_ 代替“finished”Bool,向读者表明它的值未在 block 中使用 - 您还可以考虑根据需要添加捕获列表防止强引用循环)

B.你写的闭包有一个不应该有的返回类型!多亏了 Swift 方便的特性“从单个表达式闭包中隐式返回”——您返回的是该表达式的结果,即给定索引处的元素

(completion 的闭包参数类型应该是 ((Bool) -> Void))

可以这样解决:

{ _ in self.storedCells.removeAtIndex(1);返回 ()

关于closures - animateWithDuration:animations:completion: 在 Swift 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296023/

有关closures - animateWithDuration:animations:completion: 在 Swift 中的更多相关文章

  1. ruby-on-rails - 有没有 "Code Complete"的 Ruby 书? - 2

    我开始阅读“代码完整”第2版这本书,但当我注意到大多数解决方案都可以使用Ruby惯用法在Ruby中轻松解决时,我停止了阅读。有没有类似的Ruby书籍?这是我开始阅读的版本:http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670 最佳答案 把那本书拿回来,从你离开的地方开始。作为阅读第一版并且最近以编写Ruby为生的人,我可以自信地说CodeComplete的类(class)是通用的。那本书中关于良好代码构造的智慧-质量命名、解

  2. ruby-on-rails - 如何检查一个散列是否包含在另一个散列中的 "completely"? - 2

    我正在使用RubyonRails3.1.0,我想检查一个散列是否“完全”包含在另一个散列中并返回一个bool值。假设我有那些哈希值:hash1={:key1=>'value1',:key2=>'value2',:key3=>'value3'}hash2={:key1=>'value1',:key2=>'value2',:key3=>'value3',:key4=>'value4',:key5=>'value5',...}我想检查hash1是否包含在hash2中,即使在hash2中的值多于hash1(在上述情况下,我正在寻找的响应应该是true)?是否可以通过使用“一个唯一的代码行”\“

  3. javascript - 如何将 CSS 应用于 Google Closure 库中的组件? - 2

    我正在接触Google的闭包库。我创建了一个带有SelectWidget的简单页面,但它显然需要一些样式(元素看起来像纯文本,在下面的示例中,菜单项在按钮下方弹出)。我假设库支持样式——我怎样才能连接到它们?SVN中的每个示例页面似乎都使用了自己的CSS。缩写示例如下:goog.require('goog.dom');goog.require('goog.ui.Button');goog.require('goog.ui.MenuItem');goog.require('goog.ui.Select');varinputDiv=goog.dom.$("inputContainer");

  4. javascript - 这是 Closure 的正确陈述吗? - 2

    引自StoyanStefanov的面向对象的JavaScript(第84页):Ifyou'reatpointa,you'reinsidetheglobalspace.Ifyou'reatpointb,whichisinsidethespaceofthefunctionF,thenyouhaveaccesstotheglobalspaceandtotheF-space.Ifyou'reatpointc,whichisinsidethefunctionN,thenyoucanaccesstheglobalspace,theF-spaceandtheN-spaceYoucannotreach

  5. javascript - 错误 : Zeptojs Animate Is Not A Function - 2

    zeptojs文档here当我使用$().animate函数时抛出如下错误:TypeError:$(...).animate不是函数而我使用的版本是页面提供的。 最佳答案 $(...).animate在zeptofx模块中。它不再在zepto的基本主要发行版中!http://zeptojs.com/#modules 关于javascript-错误:ZeptojsAnimateIsNotAFunction,我们在StackOverflow上找到一个类似的问题:

  6. javascript - Chrome 开发者工具中是否有 "pause animation"功能的键盘快捷键? (F12) - 2

    Chrome的开发者工具中有一个很棒的功能,允许您暂停动画并控制它们的速度,但问题是它们是鼠标控制的按钮。有时我需要暂停动画而不实际移动鼠标光标来检查悬停激事件画中的某些内容,所以我不能真正使用暂停按钮。该动画暂停按钮是否有键盘快捷键,这样无论我在做什么,我都不需要将光标移开? 最佳答案 如前所述,没有用于暂停动画的键盘快捷键,但我发现了下一个最好的方法:当光标位于带有悬停激事件画的元素。这不会停止已经运行的动画,但会阻止在检查时进一步触发鼠标激活的动画,这可能足以检查一个元素。 关于j

  7. javascript - 如何使用 ^ :export, 标记使用 `reify` 创建的方法,以便 Closure 编译器不重命名它们? - 2

    当使用reify创建JavaScript对象时,如何使用^:export标记方法,以便GoogleClosure编译器不会在高级模式下重命名它们?例如:(reifyObject(foo[this]...)(bar[this]...))我试过了(reifyObject(^:exportfoo[this]...)(^:exportbar[this]...))但这似乎没有帮助,并且名称仍然会随着高级优化而改变。如果没有办法做到这一点,除了创建一个普通的js-obj并使用set!之外,我该如何使用方法构造一个JavaScript对象将函数设置为属性(我不确定如何防止高级优化破坏事物)?

  8. javascript - 如何在不使用 css 转换的情况下将 jQuery animate 与 css3 属性结合起来? - 2

    在这个例子中;我正在尝试使用css3旋转属性创建一个jQuery动画。我可以用css3transition和jQuerycss()来管理这个动画,但我想用jQueryanimate()来根据旋转deg值来做这个到我的jQuery变体。是否可以在jQuery1.8.0中使用带有css3属性值的动画?HereisjsFiddletoinspect.jQuery:varrotateVal=90;//thismethodisn'tworking$('.red').animate({'transform':'rotate('+rotateVal+'deg)'},500);//thiswaywor

  9. javascript - 组织和合并 JS 文件,Google Closure? - 2

    我正在尝试合并我所有的插件,这样我就可以改变这个:为此:主要想法是有一个工具可以将我的网站所需的所有插件“自动导入”到我的plugins.js文件中,并在编译时缩小它们。我一直在使用GoogleClosure(编译器的可下载Java版本)进行测试,我想出了如何缩小文件但我无法导入外部文件。所以我想问你是否可以告诉我GoogleClosure是否是我正在寻找的工具,或者我是否应该使用其他工具或方法。对于“自动导入”,我的意思是:插件/HELLO.JSfunctionhello(name){alert('Hello,'+name);}插件.JS@importhello.jshello('N

  10. javascript - TypeScript 可以为 Closure Compiler 输出注释吗? - 2

    我正在使用TypeScript,我想使用Closure-Compiler来缩小和混淆构建TS代码后获得的JS输出。我读到GCC能够根据类型定义进行混淆。据我所知(如果我错了,请纠正我)这意味着如果我的代码上有类型注释,那么GCC将使用它们来进行更好的混淆。例如,对于obj.someProp,GCC目前在我的代码中查找someProp属性名称的所有实例,而不考虑它在哪个对象上,并替换所有实例到相同的混淆名称(例如o.a)。但是如果我在我的代码上有类型注释,GCC将能够知道哪个对象属于哪种类型并相应地对其进行混淆-因此两种不同类型的相同属性名称将被混淆为两个不同的名称。问题:我的理解正确吗

随机推荐