iOS13.3では@Publishedでの値更新でsinkが呼ばれない?
起きたこと
iOS13.3に更新したところ、SwiftUIのEnvironmentObject上の@Publishedの更新通知が受け取れなくなりちょっとハマりました。結局の所、もともと更新通知を受け取る処理を書き間違えていたことが原因でした。
修正前
let _ = self.model.$text.receive(on: DispatchQueue.main)
.sink { (value) in
print("receive")
self.text = value
}
修正後
var task:AnyCancellable? = nil
...
self.task = self.model.$text.receive(on: DispatchQueue.main)
.sink { (value) in
print("receive")
self.text = value
}
きちんと戻り値のAnyCancellableを保持していないことが問題でした。考えてみれば納得なのですが、iOS13.2までは動いていたので見落としていました。戒めの意味を込めて記録しておきます。