class ViewController: UIViewController { ... func foo() { weak var wself = self DispatchQueue.main.async { () in guard let self = wself else { return } // self を使う処理 DispatchQueue.main.async { () in guard let self = wself else { return } // self を使う処理 } } } }[weak self] の繰り返しは避けられますよ、僕は2重3重になるときはそうしてます。