我想让我的方法的selector个参数引用一个闭包属性,它们都存在于同一个范围内.例如,

func backgroundChange() {
    self.view.backgroundColor = UIColor.blackColor()
    self.view.alpha = 0.55

    let backToOriginalBackground = {
        self.view.backgroundColor = UIColor.whiteColor()
        self.view.alpha = 1.0
    }

    NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: #selector(backToOriginalBackground), userInfo: nil, repeats: false)
}

然而,这显示了一个错误:Argument of #selector cannot refer to a property.

当然,我可以定义一个新的、单独的方法,并将闭包的实现转移到该方法中,但对于这样一个小的实现,我希望它保持简洁.

是否可以将闭包设置为#selector参数?

推荐答案

正如@gnasher729所指出的,这是不可能的,因为 Select 器只是方法的名称,而不是方法本身.在一般情况下,我会在这里使用dispatch_after,但在这个特殊情况下,更好的工具IMO是UIView.animateWithDuration,因为它正是该函数的用途,并且很容易调整转换:

UIView.animateWithDuration(0, delay: 0.5, options: [], animations: {
    self.view.backgroundColor = UIColor.whiteColor()
    self.view.alpha = 1.0
}, completion: nil)

Swift相关问答推荐

如何在向照片添加文本时定义文本对齐、文本背景的Alpha和在文本之前添加图像

如何把多个可观测性变成一个完备性?

编写Swift字符串的属性包装时遇到问题

为什么ClosedRange<;Int&>包含的速度比预期慢340万倍?

为什么枚举上的.allCases.forEach不是循环(继续和中断不起作用)?

当计数大于索引时,索引超出范围崩溃

使用UICollectionViewFlowLayout创建水平的UICollectionView,并同时将单元格对齐到左边和右边的能力

SwiftUI如何能够在Text中使用字符串字面量来创建LocalizedStringKey?

SwiftUI 无法在实时活动中显示 SpriteView

当变量首次用于其自己的初始化时,如何清除变量...在初始化之前使用错误?

并发执行代码中捕获的 var 的变异

按钮图像不会立即刷新

您可以在运行时访问 Picker 元素并更改它们的 colored颜色 吗

Vapor 4,如何按外键过滤?

Swift 2 或 3 中的 Google Analytics 问题

SwiftUI 中的 .primary 和 .secondary colored颜色 是什么?

在 Swift 中计算两个日期之间的差异

如何以编程方式读取 wkwebview 的控制台日志(log)

如何在 SwiftUI Segmented Picker 中更改选定的段 colored颜色

类型myViewController不符合 Swift 中的协议 UIPIckerDataSource