swiftでNFCタグを読み取るアプリを作っています。
semaphoreを使って読み込みを終えてから次の処理を実行させたいです。
そのために下記のようなコードを書きました。
しかしこれを実行してみると tag.readNDEFが実行されないです。
確認してみるとsemaphore宣言後で終えてしまってその後のコードは実行されませんでした。(waitの後も)
swift
1 let semaphore = DispatchSemaphore(value: 0) 2 tag.readNDEF { (message, error) in 3 if error != nil || message == nil || message!.records.isEmpty { 4 return 5 } 6 for record in message!.records { 7 if let type = String(data: record.type, encoding: .utf8) { 8 if type == "T" { //データ形式がテキストならば 9 let res = record.wellKnownTypeTextPayload() 10 if let text = res.0 { 11 print("読み込みに成功しました。") 12 print("\(text)") 13 } 14 } 15 } 16 } 17 semaphore.signal() 18 } 19 semaphore.wait()
semaphoreを使わなければ非同期ですがttag.readNDEFは正常に実行されて読み込みできます。
同期的にtag.readNDEFを実行するにはどうすれば良いでしょうか?
ご教授よろしくお願い致します。
あなたの回答
tips
プレビュー