首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIView.animateWithDuration完成

UIView.animateWithDuration完成
EN

Stack Overflow用户
提问于 2014-08-31 19:23:13
回答 1查看 7.1K关注 0票数 3

我有一个关于如何迅速执行标题中提到的方法的问题。如果我这么做:

代码语言:javascript
复制
leadingSpaceConstraint.constant = 0
UIView.animateWithDuration(0.3, animations: {
    self.view.layoutIfNeeded()
}, completion: { (complete: Bool) in
    self.navigationController.returnToRootViewController(true)
})

我得到以下问题:在调用中缺少参数“延迟”的参数参数。只有在完成部分中有self.navigationController.returnToRootViewController()时,才会发生这种情况。如果我将该语句提取为一个独立的方法,如下所示:

代码语言:javascript
复制
leadingSpaceConstraint.constant = 0
UIView.animateWithDuration(0.3, animations: {
    self.view.layoutIfNeeded()
}, completion: { (complete: Bool) in
    self.returnToRootViewController()
})

func returnToRootViewController() {
    navigationController.popToRootViewControllerAnimated(true)
}

然后它完美地工作,做我想做的事。当然,这似乎并不是理想的解决方案,更像是一项工作。有人能告诉我我做错了什么或者Xcode (beta 6)为什么会这样吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-31 20:43:35

我想您在第一个片段中指的是popToRootViewControllerAnimated,因为returnToRootViewController不是UUNavigationController上的一个方法。

您的问题是popToRootViewControllerAnimated有一个返回值(从导航堆栈中删除的视图控制器数组)。这会带来麻烦,即使您试图丢弃返回值。

当Swift将带有返回值的函数/方法调用视为闭包的最后一行时,它假设您使用闭包语法来表示隐式返回值。(允许您编写类似于someStrings.map({ $0.uppercaseString })的东西的那种。)然后,因为您有一个闭包返回某个地方的某个内容,因此您需要传递一个返回void的闭包,所以方法调用无法进行类型检查。类型检查错误往往会产生错误的诊断消息--我相信,如果您使用filed a bug中的代码和它生成的错误消息,它会有所帮助。

无论如何,您可以通过使闭包的最后一行不是带有值的表达式来解决这个问题。我喜欢显式的return

代码语言:javascript
复制
UIView.animateWithDuration(0.3, animations: {
    self.view.layoutIfNeeded()
}, completion: { (complete: Bool) in
    self.navigationController.popToRootViewControllerAnimated(true)
    return
})

您也可以将这个popToRootViewControllerAnimated调用分配给一个未使用的变量,或者在它之后放置一个什么都不做的表达式,但是我认为return语句是最清晰的。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25595456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档