Swift Closures - 如何传递参数并且没有返回值

时间:2016-06-20 17:32:48

标签: ios swift closures

在下面的代码中,我正在尝试创建一个闭包,该闭包传递将在闭包中使用的单个参数,其中不返回任何值:

通过runit()

从我的应用程序中的另一个Swift类调用代码
  

无法调用类型'(CheckerOperation) - >的值()'带参数   列表'(CheckerOperation)'在该行   “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 个答案:

答案 0 :(得分:0)

您正在混合两种核心语法:(1)计算属性,以及(2)函数/方法

计算属性不能接受参数。对于您的情况,您应该只是使用类型为op的参数CheckerOperation来定义函数。我这样说是因为您似乎不需要返回或检查runitProcess上的值,而这正是计算属性的用途。

使用此:

func runitProcess(op: CheckerOperation) {
    NSOperationQueue.mainQueue().addOperationWithBlock({
        let operationQueue = NSOperationQueue.mainQueue()
        operationQueue.addOperation(op)
}