Swift 4.2 日本語化計画 : Swift 4.2

Swift 4 への移行


XCode 10.1 には、プロジェクトを Swift 4 に移行するのに役立つ Swift 移行ツールが付属しています。


以前のリリースの移行ガイドについては、Swift 2.3 への移行または Swift 2.2 から Swift 3 への移行 を参照してください。


移行前の準備


移行しようとするプロジェクトが Swift 3.2 モードでうまくビルドされ、すべてのテストに合格していることを確認して下さい。Swift 3.2 は 3.1 から大幅な変更が加えられており、ビルドした SDK も大幅に変更されているため、最初にエラーを解決する必要があるかもしれません。


プロジェクトをソース制御下で管理することを強くお勧めします。これにより、移行アシスタントによって適用された変更を簡単に確認し、それらを破棄して必要に応じて移行を再試行することができます。


去年とは異なり、移行ツールは別のツールではなくコンパイラに直接組み込まれているので、Swift 4 コンパイラと同様に、Swift 3.2 と Swift 4 のコードを同じように理解して一緒にコンパイルできます。つまり、プロジェクトに合ったときにターゲットごとに移行するかどうかはいつでも決められます。Swift 4 への移行は間違いなく勧めらますが、それはありかなしかのプロセスではなく、Swift 3.2 と Swift 4 のターゲットは共存でき、互いにリンクすることができます。


移行アシスタントは、選択したスキームを使用して変更を収集するために、移行ツールのビルド を実行します。処理されるターゲットは、スキームに含まれているものです。スキームに含まれている内容を確認して変更するには、 スキームの編集... シートを呼び出し、左側の列から ビルド タブを選択して、すべてのターゲットと単体テストが含まれていることを確認します。


プロジェクトが Carthage または CocoaPods によって提供される他のオープンソースプロジェクトに依存している場合は、Carthage/CocoaPods プロジェクトの使用 のセクションを参照してください。


Swift 移行アシスタント


初めて Xcode 9 を使用してプロジェクトを開くと、Issue Navigator (問題ナビゲータ) に移行案件が表示されます。クリックすると、移行するかどうか尋ねるシートが表示されます。後で思い出すことができ、または、メニューから [編集] -> [変換] -> [現在の Swift 構文へ] を選択すると、移行ツールを手動で呼び出すことができます。


移行するターゲットのリストが表示されます。Swift コードを含まないターゲットは選択されません。


今年は 1 つの移行ワークフローしかありませんが、2 種類の @objc 推論 の中から選択できます:


これらの 2 つの選択肢の詳細と意味については、Xcode のヘルプ記事 Swift 4 @objc 推論への移行 を参照してください。


[次へ] をクリックすると [プレビュー生成] シートが表示され、アシスタントはソースの変更を取得するために 移行ビルド を開始します。これが完了した後、"保存" をクリックすると適用されるすべての変更が表示されます。これにより、移行されたターゲットの Swift 言語バージョン ビルド設定も Swift 4 に変更されます。


移行プロセスに悪影響を与えるターゲットの処理に問題がある可能性があります。レポートナビゲータ に切り替えて、追加されたエントリの 変換 を選択します。これは変換ビルドログです。ログで表示された可能性のあるエラーを確認して下さい。


ターゲットにコード署名できないというエラーが表示された場合は、ターゲットのビルド設定からコード署名を無効にしてみてください。他のエラーが表示された場合は、バグレポートを提出して 詳細を記入してください。可能であれば、問題のある移行を示すプロジェクトを添付することを強くお勧めします。


Swift 4 移行の変更の概要


移行ツールが提案する変更の大部分は、以前の SDK と現在の SDK の比較によって生成されたデータから、もたらされ、これにより、識別子や型の名前が変更される可能性があり、例えば、通常の コンパイラから修正 されています。移行ツールが直接的機械的な変更を安全に実行できる特別な条項がいくつかあります。


SDK の変更点


最も一般的な SDK の 2 つの変更点は、グローバル定数を静的型プロパティに移し、文字列定数を Swift の列挙型に変換することです。これらは 移行ツールによって自動的に処理されます。さまざまな型シグネチャの変更も表示されます。


注目すべき特別なケース


新しい String


String には Swift 4 の新しい API があり、その一部は今や Substring または String を返します。この移行を容易にするために、移行ツールは、API が現在異なる型を予期している場合に、明示的なイニシャライザ変換を挿入します。


新しい String および Substring API の詳細については、Swift Evolution Document for SE-0163 を参照してください。


SE-0110:単一タプル関数型と複数引数型関数型の区別


f: (Void) -> ()


関数の引数の型に f: (Void) -> () を使用する場合、一般的に f: () -> () を意味しますので、移行ツールは代わりにこの型を使用することを推奨します。さもなければ、Swift 4 の SE-0110 の新しいルールでは、関数 ff(()) と呼ぶ必要があります。


タプルの構造体解除の追加


以下のようなコードの場合:


swift func foo(_: ((Int, Int) -> ()) {} foo { (x, y) in print(x + y) }


移行ツールは、Swift 4 でのビルドを継続するために、明示的なタプルの構造体解除を以下のように追加する必要があります。


swift func foo(_: ((Int, Int) -> ()) {} foo { let (x, y) = $0; print(x + y) } 


言語のこの変更の詳細については、SE-0110 の Swift Evolution Document を参照してください。


デフォルトのパラメータ値は public です


コンパイラは、あなたの public 関数のデフォルト引数として参照される、リテラルでない値のアクセス可能性についてより厳格になりました。それらはまた public でなければばなりません。とりわけ、これは呼び出しサイトでの値へのアクセスを最適化する機会を提供します。これには API の設計が必要な場合があるため、移行ツールは修正案を提案しませんが、API 作成者として考慮する余地はあります。


どちらの場合でも、新しい API を公開することの影響を考慮して、public シンボルを必ず文書化してください。


移行の後


移行ツールは多くの機械的な変更を処理しますが、移行ツールの変更を適用した後でプロジェクトをビルドできるようにするには、手動でさらに変更する必要があります。


関連する修正が必要なコンパイラエラーが表示されることがあります。移行ツールは Swift 4 コンパイラが提供する修正を組み込むように設計されていますが、時間の 100% 適用されない場合は修正が適用されないことがあります。


たとえコンパイルがうまく行っても、移行ツールが提供したコードは理想的ではないかもしれません。あなたの最善の判断を使用して、変更があなたのプロジェクトに適していることを確認してください。


移行に関する既知の問題


Xcode 9 での移行に関する最新の既知の問題については、Developer Downloads ページの Xcode 9 のリリースノートの Swift Migration セクションを参照してください。


Carthage/CocoaPods プロジェクトの使用


訳注: Carthage とは、カルタゴの事です。


Carthage、CocoaPods、または Swift Package Manager などのパッケージマネージャを使用して、外部依存関係を持つプロジェクトを移行する際に考慮すべき重要な点をいくつか示します。


その他





目次
Xcode の新機能

SwiftLogo
  • Swift 4.2 全メニュー

  • Swift プログラム言語

  • Swift について
  • Swift 4.2 への移行

  • ブログ

  • Swift のダウンロード

  • 文書化
  • Swift 4 への移行

  • 移行前の準備
    Swift 移行アシスタント
    Swift 4 移行の変更の概要
    SDK の変更点
    注目すべき特別なケース
    新しい String
    デフォルトのパラメータ値は public です
    移行の後
    移行に関する既知の問題
    Carthage/CocoaPods プロジェクトの使用
    その他
  • Swift 3 への移行

  • ソースコード

  • コミュニティガイドライン

  • 投稿

  • Swift の継続的統合

  • Swift ソースの互換性

  • フォーカスエリア

  • ABI の安定性

  • サーバーワークグループ

  • コンパイラと標準ライブラリ

  • プロジェクト

  • パッケージマネージャ

  • Swift コアライブラリ

  • REPL とデバッガ、プレイグラウンド













  • トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)












    トップへ(Swift 4.2)