保存されたプロパティで@availableを使用する 質問する

保存されたプロパティで@availableを使用する 質問する

ローカル通知を使用し、iOS 10 をサポートするアプリがあります。iOS 9 のサポートを追加しようとしていますが、古い位置情報通知 API を使用する必要があります。iOS 10 コードで を使用しようとしています@available#available、center 変数を iOS 10 を実行しているデバイス専用にする方法がわかりません。

ターゲットを iOS 10 から 9 に設定すると、この変数に関するエラー メッセージが表示されます。

UNUserNotificationCenter is only available on iOS 10.0 or newer.

クラス全体に追加することを提案しています@available(iOS 10.0, *)が、このクラスには iOS 9 で使用されるコードがあるため、これは実行したくありません。center プロパティを iOS 10 だけに制限する方法について、ご提案いただければ幸いです。

class ViewController: UIViewController, UITextFieldDelegate {
  
  let center = UNUserNotificationCenter.current()
  ...
}

ベストアンサー1

Xcode 14 (およびそれ以下) で動作するソリューション

ここに1つの解決策があります(ブログ投稿)。アイデアとしては、 の型の保存プロパティを使用しAny、保存プロパティをキャストする (必要に応じてインスタンス化する) 計算プロパティを作成することです。

private var _selectionFeedbackGenerator: Any? = nil
@available(iOS 10.0, *)
fileprivate var selectionFeedbackGenerator: UISelectionFeedbackGenerator {
    if _selectionFeedbackGenerator == nil {
        _selectionFeedbackGenerator = UISelectionFeedbackGenerator()
    }
    return _selectionFeedbackGenerator as! UISelectionFeedbackGenerator
}

おすすめ記事