LoginSignup
3
1

【SwiftUI】UIWindowSceneを@Environmentを使って取得する

Last updated at Posted at 2023-05-21

はじめに

SwiftUIでUIWindowを使うことがたまにあります。
ちょっとめんどなので@Environmentで簡単に使えるようにしてみました。

このUIWindowの取得方法がベストなのかはわからないです。
もっと良い方法があればコメントください。

実装

private struct UIWindowSceneEnvironmentKey: EnvironmentKey {
    static var defaultValue: UIWindowScene? {
        return UIApplication.shared.connectedScenes.first(where: {
            $0.activationState == .foregroundActive
        }) as? UIWindowScene
    }
}

extension EnvironmentValues {
    var windowScene: UIWindowScene? {
        get { self[UIWindowSceneEnvironmentKey.self] }
        set { self[UIWindowSceneEnvironmentKey.self] = newValue }
    }
}

extension View {
    func windowSceneValue(_ windowScene: UIWindowScene?) -> some View {
        environment(\.windowScene, windowScene)
    }
}

使い方

iOS14からレビュー依頼を出す際にUIWindowSceneが必要になりました。
今回は例としてレビュー依頼を実装してみます

import SwiftUI
import StoreKit

struct ContentView: View {
    @Environment(\.windowScene) var windowScene
    var body: some View {
        Button("レビュー依頼") {
            if let windowScene {
                SKStoreReviewController.requestReview(in: windowScene)
            }
        }
    }
}

おわり

簡単に書けるようになりました

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1