1

以下のような弱い自己を使用するコードをよく見かけます。

api.call() { [weak self] (result, error) in
  if (error == nil) {
    setGlobalState()
    self?.doSomething()
  } else {
    setSomeErrorState()
    self?.doSomethingElse()
  }
}

しかし、self が nil の場合、 setGlobalState() は実行されたが self?.doSomething() は実行されなかったため、状態が矛盾しているように思えます。

次のようにするのが賢明なようです。

api.call() { [weak self] (result, error) in
  guard let self = self else { return }

  if (error == nil) {
    setGlobalState()
    self.doSomething()
  } else {
    setSomeErrorState()
    self.doSomethingElse()
  }
}

最初のケースでの原子性の欠如についての私の懸念は正当ですか? 弱い自己を使用するブロックに関しては、後者のケースがベスト プラクティスである必要がありますか?

4

1 に答える 1