移行(Part IV)


Objective-C コードから Swift への移行


Migration (移行)は、既存の Objective-C アプリを再検討し、Swift でその部分を置き換えることにより、そのアーキテクチャ、ロジック、およびパフォーマンスを改善する機会を提供します。アプリの簡単な、段階的な移行では、以前に学んだツールを使って、うまく組み合わせて相互運用性を使うことになるでしょう。うまく組み合わせる機能は、どの特徴と機能を Swift で実装するか、そして Objective-C にどれを残しておくかを選択することが簡単にできます。相互運用性により、煩わしくなく Objective-C コードにこれらの機能を戻して統合することができます。一度で Swift のアプリ全体を書き換えることなく Swift の豊富な機能を探検するのにこれらのツールを使用し、既存の Objective-C アプリに統合してください。


移行のための Objective-C コードの準備


コードベースの移行を開始する前に、Objective-C と Swift のコードが、最適な互換性を持っていることを確認してください。これは既存の Objective-C のコードベースの片付けと最新化を意味します。既存のコードは、簡単にシームレスに Swift と対話できるようにでき、最新のコーディング慣行に従えるでしょう。前に進む前に、実践の短いリストの、最新の Objective-C の採用 をご覧ください。


移行プロセス


Swift にコードを移行するための最も効果的な方法は、一度に一つのファイル単位で、つまり一度に一つのクラスを移すことです。Objective-C で Swift のクラスをサブクラス化することはできないので、サブクラスを持っていないアプリでクラスを選択するのが最良の選択です。一つの .swift ファイルを使用して、そのクラスの .m.h ファイルを置き換えます。実装とインタフェースからすべてがこの一つの Swift ファイルに直接移動します。ヘッダファイルを作成する必要はありません。Xcode はそれを参照する必要がある場合に自動的にヘッダを生成します。


はじめる前に


作業中に


    << SWIFT >>

  1. @objc var enabled: Bool {
  2.         @objc(isEnabled) get {
  3.                // ...
  4.         }
  5. }



見終わったら



トラブルシューティングのヒントと注意


各々の移行の経験は、既存のコードベースに応じて異なっていても、あなたのコードの移行のトラブルシューティングに役立つ、いくつかの一般的な手順とツールがあります。






前:同じプロジェクトでの Swiftと Objective-C 後:マニュアルの更新履歴
目次
Xcode 10 の新機能

Swift:はじめに
Swift Programming Language
Swift Blog より

  • はじめに(Part I)
  • 基本設定
  • Swift 環境の設定
    Swift のインポートプロセスの理解
  • 相互運用性(Part II)
  • Objective-C API との相互作用
  • 初期化
  • クラスファクトリメソッドとコンビニエンスイニシャライザ
    失敗可能な初期化
    プロパティへのアクセス
    メソッドでの作業
  • id の互換性
  • Any のダウンキャスト
    動的なメソッドの参照
    認識されないセレクタと optional の連鎖
  • ヌル可能性 (Nullabity) と optionals
  • ヌル可能性のない (nonnullable) オブジェクトに Optional をブリッジする
    プロトコルで修飾されたクラス
    軽量級の汎用
    拡張機能
  • クロージャ
  • self をキャプチャする時の強い循環参照を回避する
  • オブジェクトの比較
  • Hash する
  • Swift の型の互換性
  • Objective-C で Swift インターフェースの構成
    動的な送出を要求
  • セレクタ
  • Objective-C メソッドの安全でない呼び出し
    キーとキーパス
  • Swift のクラスとプロトコルの書き方及び Objective-C の動作
  • Objective-C のクラスからの継承
  • NSCoding
    プロトコルの採用
    イニシャライザとデイニシャライザを書く
    Objective-C API で Swift クラス名を使用する
  • Interface Builder との統合
  • アウトレットとアクションを使った作業
    ライブレンダリング
  • プロパティ属性の指定
  • Strong と Weak
    読み/書き可能と読み取り専用
    コピーの意味
    コアデータ管理オブジェクトサブクラスの実装
    プロトコルの宣言
  • Cocoa フレームワークでの作業
  • Foundation
  • ブリッジ型
  • 名前の変更された型
  • 文字列

    配列
    セット
    Dictionary
  • Core Foundation
  • 再マッピングされた型
    メモリ管理オブジェクト
    管理されないオブジェクト
    統合ログオン
    Cocoa 構造体
  • Cocoa デザインパターンの採用
  • デリゲート化
    遅延した初期化
  • エラー処理
  • エラーの catch と処理
    エラーを Optional の値に変換する
    エラーを throw する
    カスタムエラーの Catch と処理
    キー値の監視
    ターゲット・アクション
    シングルトン
    Introspection(内省)
  • 連載
  • ローカライズ
    自動解放プール
    API の利用
    コマンドライン引数の処理
  • C の API との相互作用
  • 原始的な型
  • グローバル定数
  • import された定数の列挙体と構造体
  • 関数
  • 可変個引数の関数
  • 構造体
  • 型メンバとして関数を import
    列挙型
    Option のセット
    ユニオン
    ビットフィールド
    名前のない構造体と union のフィールド
  • ポインタ
  • 定数ポインタ
    可変ポインタ
    自動解放ポインタ
    関数ポインタ
    バッファポインタ
    ヌルポインタ
    ポインタの計算
    データ型サイズの計算
    1回限りの初期化
  • プリプロセッサの指令
  • 簡単なマクロ
    複雑なマクロ
    条件付きコンパイルブロック
  • うまく組み合わせる(part III)
  • 同じプロジェクトでの Swift と Objective-C
  • 「うまく組み合わせる」概観
  • 同じアプリターゲット内からコードを import
  • Objective-C から Swift への import
    Swift から Objective-C への import
  • 同じフレームワークターゲット内からコードを import
  • Objective-C から Swift への import
    Swift から Objective-C への import
    外部フレームワークの import
  • Objective-C からの Swift の使い方
  • Objective-C ヘッダでの Swift クラスまたはプロトコルの参照
    Objective-C クラスで採用可能な Swift プロトコルを宣言
    Objective-C の実装での Swift プロトコルの採用
    Objective-C から使用できる Swift のエラー型の宣言
  • Objective-C インターフェイス用に Swift 名をオーバーライド
  • クラスファクトリメソッド
    列挙型
    Objective-C 宣言を洗練する
    Swift で Objective-C インターフェイスを使用できないようにする
    Objective-C API へ利用可能性情報の追加
    プロダクトモジュールの命名
    トラブルシューティングのヒントと注意
  • 移行(Part IV)
  • Objective-C から Swift への移行
  • 移行のための Objective-C コードの準備
  • 移行プロセス
  • はじめる前に
    作業中に
    見終わったら
    トラブルシューティングのヒントと注意
  • 更新履歴
  • マニュアルの更新履歴