33748
お世話になります。

iOS10と9に対応したいアプリの通知処理を作っています。  
iOS9ではフォアグラウンドのとき通知が表示されないので通知の受信を

```

    application(_ application: UIApplication, didReceive notification: UILocalNotification)
    
```

を使って制御してバックグラウンドと同じような通知を表示しようとしています。  
しかしこれは **Deprecated** なメソッドだそうでiOS9のみで実装するようにしたいです。

```

    @available(iOS 10.0より古い, *)
    
```

といった感じの指定がしたいのですがそういった事はできるのでしょうか？

* * *

修正  
現状はメソッドの中でバージョンを判定して処理を分けるようにしました。

```

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
    
```

を実装している状態でiOS9ではフォアグラウンドで通知が来た時とバックグラウンドで通知表示を押して戻った時、  
iOS10ではフォアグラウンド、バックグラウンド時の通知表示をタップした時、

```

    func application(_ application: UIApplication, didReceive notification: UILocalNotification)
    
```

が呼ばれ、これはiOS9でしか使う予定がないのでこの下のメソッドをiOS10より前でのみこの内容で実装するということは出来ないでしょうか？
CC BY-SA 3.0
2017-04-03T06:36:04.713
33734
2017-04-03T14:17:17.843
2017-04-03T14:17:17.843
14222
14222
question
swift ios xcode
Swiftでメソッドの実装をiOSバージョンごとに分ける・無くす方法
`UIDevice`クラスを使います。

```

    UIDevice.current.systemVersion
    
```

返り値は、数値でなく、文字列（`String`）なのに注意してください。
CC BY-SA 3.0
2017-04-03T07:00:06.493
33737
2017-04-03T07:00:06.493
18540
33734
answer
こんな指定ができます。

```

    @available(iOS, deprecated: 10.0)
    func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
        //...
    }
    
```

他のプラットフォーム(tvOS, macOS等)もサポートする必要があれば、同様の複数のアトリビュートを重ねることもできます。

`@available`アトリビュートの使い方については、こちらに記載されているのですが、実例が少ないのでちょっとわかりにくいかもしれません。

[Declaration
Attributes](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html#//apple_ref/doc/uid/TP40014097-CH35-ID348)
([The Swift Programming Language (Swift
3.1)](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/index.html#//apple_ref/doc/uid/TP40014097))
CC BY-SA 3.0
2017-04-03T12:04:38.277
33748
2017-04-03T12:04:38.277
13972
33734
answer