在NSOperation中包装异步函数调用

时间:2015-07-11 23:12:59

标签: ios multithreading swift asynchronous nsoperation

我正在尝试使用带有完成处理程序的函数,如下所示:

myFunc(completion: {(var1, var2) -> Void in
    // do something interesting with variables
})

我的问题是我需要依赖于其他NSOperations并且具有NSOperations的依赖关系,所以我需要将myFunc()包装在NSOperation中。我该怎么做呢?

我已经开始研究子类化NSOperation并实现异步'finished'标志,但是看起来应该有一个更容易,更轻量级的方法来做这个没有子类,可能使用NSBlockOperation或NSInvocationOperation。

1 个答案:

答案 0 :(得分:0)

我找到了AsyncOpKit的解决方案。它允许您在内部异步调用完成后标记操作“已完成”。以下是具有上面定义的函数的示例代码

function convert($string) {
    $persianDigits= array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
    $arabicDigits= array('٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١', '٠');
    $allPersianDigits=array_merge($persinaDigits, $arabicDigits);
    $replaces = range(0,9);
    return str_replace($allPersianDigits, $replaces , $string);
}

然后就像使用任何class MyFuncOperation: AsyncOperation { override main() { myFunc(completion: {(var1, var2) -> Void in // do something interesting with variables finish() }) } } 子类一样使用MyFuncOperation

NSOperation

https://cocoapods.org/pods/AsyncOpKit