📘
'windows' was deprecated in iOS 15.0... と言う警告を消す
いつの頃からか下記のコードで'windows' was deprecated in iOS 15.0: Use UIWindowScene.windows on a relevant window scene instead
と言う警告が出るようになった。
let window = UIApplication.shared.windows.first
現状まだ動作はするのだが気持ち悪いのでメッセージに従ってコードを修正してみた。
UIWindowScene
メッセージは単純でwindows
がiOS 15.0ではdeprecatedなので代わりにUIWindowScene.windows
を使うようにと言う内容。
しかし、単純にlet window = UIWindowScene.windows.first
としてもInstance member 'windows' cannot be used on type 'UIWindowScene'; did you mean to use a value of this type instead?
とエラーになってしまう。
これはwindows
がUIWindowScene
のインスタンスメンバ(プロパティ)なので当たり前。UIWindowScene
のインスタンスに対してwindows
にアクセスしないといけない。
と言うわけでUIWindowScene
インスタンスを得るためのコードから書く必要がある。こんな感じ。
let scenes = UIApplication.shared.connectedScenes
let windowScene = scenes.first as? UIWindowScene
let window = windowScene?.windows.first
最初のUIApplication.shared.connectedScenes
で得られるのがSet<UIScene>
なのでUIWindowScene
にキャストしなければならないのが一手間かかる…
取り敢えず、これで警告は消えて動作も今まで通りで終了。
参考
Discussion