私のCocoaアプリケーションでは、プロパティが変更されるべきではないときにプロパティが変更されます。何が起こるかを知るために、私は問題を絞り込むのに役立つアサーションを入れました(私は「変数を見る」ように試みましたが、どのように使用されているか理解できませんでした)。しかし今、私はそれが想定していたものとは反対のような主張に直面しています(スクリーンショット参照)。アサーションは失敗する必要がある場所で失敗します。なぜですか?
コードを別のスレッドで実行するには、カスタム演算子(下記参照)を使用しています。
私は何が欠けていますか、そして私は前進するために何ができますか?
import Foundation
infix operator ~>
/**
Executes the lefthand closure on a background thread and,
upon completion, the righthand closure on the main thread.
Passes the background closure's output, if any, to the main closure.
*/
func ~> <R> (
backgroundClosure: @escaping() -> R,
mainClosure: @escaping (_ result: R) ->())
{
queue.async {
let result = backgroundClosure()
DispatchQueue.main.async {
mainClosure(result)
}
}
}
private let queue = DispatchQueue(label: "Edk4ServerRequests")
カスタムオペレータの定義。 (コードはhttps://ijoshsmith.com/2014/07/05/custom-threading-operator-in-swift/から適合)
を変更される際に実行が停止されます私はサンプルで使用されるカスタム「〜>」演算子に関する重要な情報を追加しました。 –
私は 'isUpdating'が別のスレッドによって変更されないようにコードを書き直しました。それでも、スクリーンショットでは、アサーションが失敗したときに 'isUpdating'の値がデバッガによって' false'と表示されることを理解したいと思います。 –