スマートデバイスアプリ開発のあれやこれや

Swiftで実現する非推奨(deprecated)APIの置換処理

来月のWWDC2015にて、次期iOS(iOS 9?)が発表されそうです。
新しいAPIが使えるようになり、楽しみが増える一方で使えなくなるAPIもあり
開発しているアプリの新バージョン対応に右往左往するシーズンです。

一般的に非推奨APIは以下の3種類に分類出来ます。


Objective-Cでの対応方法は確立しているので
今回は上記の3種類に対して、Swiftでどう対応していくのか整理します。

クラスが非推奨になった

Objective-C時代は、以下のような対応でした。

if ([DeprecatedClass class]) {
  // DeprecatedClassが存在する場合
} else {
  // DeprecatedClssが存在しない場合
  // 新バージョンでの代替APIを使う


Swiftでは以下のような処理を実装します。

if NSClassFromString("DeprecatedClass") {
  // DeprecatedClassが存在する場合
} else {
  // DeprecatedClssが存在しない場合
  // 新バージョンでの代替APIを使う
}

メソッドが非推奨になった

Objective-C時代は、以下のような対応でした。

if ([obj respondsToSelecor:@selector("deprecatedMethod")]) {
  // deprecatedMethodが存在する場合
} else {
  // deprecatedMethodが存在しない場合
  // 新バージョンでの代替APIを使う


Swiftでも同じですね!

if obj.respondsToSelector("deprecatedMethod") {
  // deprecatedMethodが存在する場合
} else {
  // deprecatedMethodが存在しない場合
  // 新バージョンでの代替APIを使う
}

プロトコルが非推奨になった

Objective-C時代は、以下のような対応でした。

if ([obj conformsToProtocol:@protocol("DeprecatedProtocol")]) {
  // DeprecatedProtocolが存在する場合
} else {
  // DeprecatedProtocolが存在しない場合
  // 新バージョンでの代替APIを使う


Swiftでも同じですね!

if obj.conformsToProtocol("DeprecatedProtocol") {
  // DeprecatedProtocolが存在する場合
} else {
  // DeprecatedProtocolが存在しない場合
  // 新バージョンでの代替APIを使う
}