1. asashin227

    No comment

    asashin227
Changes in body
Source | HTML | Preview
@@ -1,45 +1,45 @@
毎回セマフォを書くのがめんどかったのでこんなのを作りました
##コード
```swift
/// 条件をクリアするまで待ちます
///
/// - Parameters:
-/// - continuation: 待機条件
-/// - deviceToken: 通過後の処理
+/// - waitContinuation: 待機条件
+/// - compleation: 通過後の処理
func wait(_ waitContinuation: @escaping (()->Bool), compleation: @escaping (()->Void)) {
var wait = waitContinuation()
// 0.01秒周期で待機条件をクリアするまで待ちます。
let semaphore = DispatchSemaphore(value: 0)
DispatchQueue.global().async {
while wait {
semaphore.signal()
Thread.sleep(forTimeInterval: 0.01)
semaphore.wait()
DispatchQueue.main.async {
wait = waitContinuation()
}
}
// 待機条件をクリアしたので通過後の処理を行います。
DispatchQueue.main.async {
compleation()
}
}
}
```
##使い方
```swift
var imgData: NSData! = nil
DispatchQueue.global().async {
imgData = NSData(contentsOf: URL(string: "http://hogehoge.com/fugafuga.png")!)
}
// dataを取得するまで待ちます
wait( { return imgData == nil } ) {
// 取得しました
print("finish")
UIImage(data: imgData as Data)
}
```