ios - Swift 闭包从函数返回

标签 ios swift synchronization closures swift4

在检查 Swift 闭包内的条件后如何从函数返回?从 Swift 闭包返回只是从闭包返回,而不是函数。具体来说,我在 Swift 中使用了以下 @synchronized 模拟:

    func synchronized(_ object: AnyObject, block: () -> Void) {
       objc_sync_enter(object)
       block()
       objc_sync_exit(object)
    }

    func synchronized<T>(_ object: AnyObject, block: () -> T) -> T {
       objc_sync_enter(object)
       let result: T = block()
       objc_sync_exit(object)
       return result
    }

然后在我的函数中:

  public func stopRunning() {
      synchronized( self ) {
        if status != .finished  {
            return;//<--Need to return from the function here, not just closure
        }
      }

     ...
     ...
    }

最佳答案

您需要使用其他一些机制。也许返回一个 bool 值,告诉您应该立即返回。

func synchronized(_ object: AnyObject, block: () -> Bool) -> Bool 
{
   objc_sync_enter(object)
   defer { objc_sync_exit(object) }
   return block() 
}

public func stopRunning() {
    guard synchronized( self, block: {
        if status != .finished  {
            return false//<--Need to return from the function here, not just closure
        }
        return true
      }) 
    else { return }

     ...
     ...
}

关于ios - Swift 闭包从函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57723269/

相关文章:

ios - 在子类中实现协议(protocol)方法

ios - 快速地,我如何缩放和定位 SKSpriteNode 以适合每部 iPhone?

将度数转换为弧度时,Swift-Binary 运算符不能应用于操作数

swift - 向协议(protocol)变量添加两个约束

ajax - 在循环中与 JQuery 同步 Ajax 请求

synchronization - OpenMP 命名的关键部分 : if a program variable is used, 是被评估还是被用作字符串而不被评估?

android - Paypal Android SDK 是否支持并行、链式支付?

ios - 如何在 UIPickerView 中加载从 Firebase 检索到的数据?

swift - 获得一个通用的枚举属性,而不必匹配每个案例

ios - 如何延迟异步函数并等待完成 block 执行?