xyk blog

最近は iOS 開発の記事が多めです。

UIViewController で画面表示時に1度のみ処理を実行する

検証環境:
Version 13.2 (13C90)
Swift 5.5.2

UIViewController で画面表示時に何か処理を1度のみ実行したい時に lazy stored property を使って簡潔に書くやり方。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    _ = viewDidAppearOnce
}

private lazy var viewDidAppearOnce: Void = {
    // doSomething
}()

RxSwift を使っているなら

private let disposeBag = DisposeBag()

override func viewDidLoad() {
    super.viewDidLoad()

    rx.sentMessage(#selector(viewDidAppear))
        .take(1)
        .subscribe(onNext: { _ in
            // doSomething
        }).disposed(by: disposeBag)
}