📘
'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