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

标签 ios swift closures

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

该代码是通过 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/

相关文章:

ios - PresentViewController 在 iOS 中隐藏导航栏

ios - 随机 uint8_t 数

ios - 使用 swift 对 parse.com 中的数组进行降序计数

swift - 您可以在不使用自定义 dateFormat 的情况下覆盖 NSDateFormatter 12 与 24 小时时间格式吗

functional-programming - 闭包在函数式编程中的地位

JavaScript 沙盒 : hide global variables from a given scope

iphone - UIWebView 中如何处理图像

swift - 随机打乱 URL 列表 - Swift

ios - 带自动换行的多行标签

循环内的 JavaScript 闭包 – 简单的实际示例