環境
Xcode 12.2
swift 5
build端末 ipad air(4th)
とあるプリンターに印刷処理を送る際に、通信エラーが発生したり、紙切れが発生した場合に、再びプリンターが動き出せるようになるまで、sleep(10)をかけながら無限ループさせるようなロジックを作成しようと考えています。(無限ループから強制的に抜ける方法も後ほど考える)
storybordで配置したlabelにエラーメッセージを反映させたいのですが、以下のような事象が起きてしまいうまく実現することができていません。
1,1回目のループの際にエラーが出たとしてもエラーメッセージが表示されない(labelに反映されない)
2,エラーメッセージが表示されるタイミングがワンループ分遅れる(printErrorにエラー判定が入った場合にそのループのうちにエラーメッセージを表示させたい)
swift
1while count <= numberOfPrintedSheets { 2 currentPrintCount.text = String(count) + "枚目" 3 let printError = printerDriver.printImage(with: url as URL, settings: printSettings) 4 switch printError.code { 5 case.noError: count += 1; errorFlag = 0 6 default: 7 if errorFlag == 0 { count += 1; errorFlag = 1} 8 printStatusLabel.text = { 9 switch printError.code { 10 case .printerStatusErrorPaperEmpty: return "紙切れが発生しました。近くにいるスタッフにお声がけください。" 11 case .printerStatusErrorCoverOpen: return "プリンターのカバーが空いています。「カチッ」と音がするようしっかり閉めてください。" 12 default: return "通信エラーが発生しました。以下の中断ボタンで印刷を中断するか、時間を置いてもう一度お試しください。" 13 } 14 }() 15 sleep(10) 16 } 17}
試しにループの頭の部分に
swift
1print(printStatusLabel.text)
と出力してみると、画面には表示されていませんが、きちんとエラーメッセージが代入されていることがわかりました。
出力→Optional("紙切れが発生しました。近くにいるスタッフにお声がけください。")
何かロジックに問題があるのかそれともswift独特のUI描画の条件等あるのでしょうか?
わかる方いらっしゃればご教授いただけますと幸いです。
よろしくお願い致します。
あなたの回答
tips
プレビュー