当前位置: 首页 > 面试题库 >

Swift上的块(animateWithDuration:animations:completion :)

海新霁
2023-03-14
问题内容

我在使代码块在Swift上无法工作时遇到麻烦。这是一个有效的示例(没有完成框):

UIView.animateWithDuration(0.07) {
    self.someButton.alpha = 1
}

或没有尾随闭包:

UIView.animateWithDuration(0.2, animations: {
    self.someButton.alpha = 1
})

但是一旦我尝试添加完成代码块,它将无法正常工作:

UIView.animateWithDuration(0.2, animations: {
    self.blurBg.alpha = 1
}, completion: {
    self.blurBg.hidden = true
})

自动完成功能给了我completion: ((Bool) -> Void)?但不确定如何使它起作用。还尝试了结尾闭包,但出现了相同的错误:

! Could not find an overload for 'animateWithDuration that accepts the supplied arguments

Swift 3/4的更新:

// This is how I do regular animation blocks
UIView.animate(withDuration: 0.2) {
    <#code#>
}

// Or with a completion block
UIView.animate(withDuration: 0.2, animations: {
    <#code#>
}, completion: { _ in
    <#code#>
})

我不使用结尾封闭符作为完成块,因为我认为它不够清晰,但是如果您喜欢它,那么可以在下面看到Trevor的答案


问题答案:

animateWithDuration中的完成参数采用一个包含一个布尔参数的块。像在Obj C块中一样,必须迅速指定闭包采用的参数:

UIView.animateWithDuration(0.2, animations: {
    self.blurBg.alpha = 1
}, completion: {
    (value: Bool) in
    self.blurBg.hidden = true
})

这里的重要部分是(value: Bool) in。这告诉编译器,此闭包采用标有“值”的Bool并返回void。

作为参考,如果您想编写一个返回布尔值的闭包,则语法为

{(value: Bool) -> bool in
    //your stuff
}


 类似资料:
  • 我正在使用SWRevealViewController库在swift中制作一个滑出菜单,但我很难将这个菜单放在右侧。我在图书馆的描述上看到了这个注释 但我对目标C不熟悉,我无法在SWIFT上做到这一点。这是我的默认(左)菜单代码的一部分: 并且从SWRevealViewController库调用revealViewController

  • 问题内容: 我经常在我的Swift应用程序中使用第三方Swift框架,并且希望使用它而不必一遍又一遍地写每个Swift文件。 有没有办法指定默认导入,就像使用文件在Objective-C中那样? 我已经检查了Xcode的构建设置和标志,但是没有一个提供此功能。 问题答案: 实际上,有一个我之前可以想到的非常简单的解决方法…… 只需将以下内容添加到应用程序项目的Objective-C桥接标头中: 斯

  • 问题内容: 我在新的Swift项目中使用Objective-C Firebase框架时遇到麻烦。我主要来自C#背景,因此Swift闭合语法尚不清楚。 这是在f为Firebase对象的情况下在Objective-C中代码的工作方式 XCode auto建议使用这种语法,而我还没有找到可行的解决方案。 我想像Objective-C示例一样将FDataSnapshot数据分配给一个变量。谢谢 问题答案:

  • 除了通过putObject接口上传文件到OSS以外,OSS还提供了另外一种上传模式 —— Multipart Upload。用户可以在如下的应用场景内(但不仅限于此),使用Multipart Upload上传模式,如: 需要支持断点上传。 上传超过100MB大小的文件。 网络条件较差,和OSS的服务器之间的链接经常断开。 需要流式地上传文件。 上传文件之前,无法确定上传文件的大小。 下面我们将一步

  • 除了通过putObject接口上传文件到OSS以外,OSS还提供了另外一种上传模式 —— Multipart Upload。用户可以在如下的应用场景内(但不仅限于此),使用Multipart Upload上传模式,如: 需要支持断点上传。 上传超过100MB大小的文件。 网络条件较差,和OSS的服务器之间的链接经常断开。 需要流式地上传文件。 上传文件之前,无法确定上传文件的大小。 下面我们将一步

  • 问题内容: 我将Xcode升级到8.1 GM,现在遇到SwiftyJSON的以下错误。其他导入的框架似乎可行。在SwiftyJSON升级其框架之前,是否有办法强迫它在Swift 3中工作?我用迦太基来导入/更新框架。我也尝试将“ 打开”和“关闭” 更改为无效。 使用Swift 3.0编译的模块无法在Swift 3.0.1中导入:Modules / SwiftyJSON.swiftmodule /