1. asashin227

    Posted

    asashin227
Changes in title
+セマフォの記述を楽にする
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,45 @@
+
+毎回セマフォを書くのがめんどかったのでこんなのを作りました
+
+##コード
+```swift
+/// 条件をクリアするまで待ちます
+///
+/// - Parameters:
+/// - continuation: 待機条件
+/// - deviceToken: 通過後の処理
+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)
+}
+```