在下面的代码中,我尝试创建一个闭包,该闭包传递一个将在闭包中使用的参数,但不返回任何值:
该代码是通过 runit() 从我的应用程序中的另一个 Swift 类调用的
Cannot invoke value of type ‘(CheckerOperation) -> ()’ with argument list ‘(CheckerOperation)’ at the line “runTimerProcess(runitProcess(customOperation))
我不明白当闭包不返回值时如何调用。
(CheckerOperation
只是一个自定义的 NSOperation
类)
class Checker {
var queue = NSOperationQueue()
let customOperation : CheckerOperation = CheckerOperation()
var runitProcess: (CheckerOperation) -> () = {op in
NSOperationQueue.mainQueue().addOperationWithBlock({
let operationQueue = NSOperationQueue.mainQueue()
operationQueue.addOperation(op)
})
}
func runTimerProcess(closureblock: ClosureBlock){
let queue = dispatch_queue_create(“myqueue”, DISPATCH_QUEUE_SERIAL)
dispatch_async(queue,closureblock)
}
func runit(){
runTimerProcess(runitProcess(customOperation))
}
}
最佳答案
您正在混合两种核心语法:(1) 计算属性和 (2) 函数/方法。
计算属性不能接受参数。对于您的情况,您应该简单地定义一个带有参数 op
且类型为 CheckerOperation
的函数。我这样说是因为您似乎不需要返回或检查 runitProcess
上的值,这实际上是计算属性的用途。
使用这个:
func runitProcess(op: CheckerOperation) {
NSOperationQueue.mainQueue().addOperationWithBlock({
let operationQueue = NSOperationQueue.mainQueue()
operationQueue.addOperation(op)
}
关于ios - Swift Closures - 如何传递参数并且没有返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37928513/