Swift 4.2 日本語化計画 : Swift 4.2

Swift 3 への移行


これは、Xcode 8 および Swift 2 から移行するための従来の文書です。


Xcode 8.0 には、プロジェクトを Swift 3 に移行するための Swift Migrator ツールが付属しています。また、Swift 2.3 で動作するように更新するツールと新しい SDK が付属します。


移行前の準備


最も効果的な移行を行うには、Xcode 7.3[.1] を使用する場合、移行しようとするプロジェクトが正常にビルドされ、すべてのテストに合格していることを確認してください。


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


異なる独立した製品 (または異なるプラットフォーム用の同じ製品) をビルドする複数のスキームがある場合は、プロジェクト内のすべてをビルドするスキームを一つ作成し、ユニットテストターゲットを含む必要なすべてのプラットフォーム用に作成することが重要です。移行アシスタントは、選択したスキームを使用して変更を収集するために、移行ツールを "ビルド" します。そして、処理されるターゲットは、スキームに含まれるものです。


スキームに含まれている内容を確認して変更するには、"スキームの編集..." シートを呼び出し、左側の列から "ビルド" タブを選択し、すべてのターゲットとユニットテストが含まれていることを確認します。


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


Swift 移行アシスタント


初めて Xcode 8.0 を使用してプロジェクトを開くと、移行アシスタントを経由して移行パスを実行するよう求められます。アシスタントはメニューから Edit -> Convert -> To Current Swift Syntax… で手動で呼び出すこともできます。


2 種類の移行から実行を選択できます。



必要に応じて、今は Swift 2.3 に移動し、後で Swift 3 に更新するために、再度移行アシスタントを呼び出すことができます。


移行アシスタントを起動し、"Swift 2.3 の使用" または "Swift 3 の使用W" を選択すると、移行するターゲットのリストが表示されます。Swift コードを含まないターゲットは選択できません。


[次へ(Next)] をクリックすると、[プレビューを生成(Generate Preview)]シートが表示され、アシスタントはソースの変更を取得するために移行の 'ビルド' を開始します。これが完了して、[保存(Save)] をクリックすると適用されるすべての変更が表示されます。diff ビューでは、元のソース (変換前) が右側にあり、変更した物は左側にあることに注意してください。[保存(Save)] をクリックすると、ソースの変更が元のファイルに対して適用されます。Swift 2.3 への移行を選択した場合、ターゲットには "Use Legacy Swift" ビルド設定が適用されます。


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


ターゲットにコード署名できないというエラーが表示された場合は、ターゲットのビルド設定からコード署名を無効にしてみてください。

他のエラーが表示された場合は、バグレポートを https://bugreport.apple.com に提出し、詳細を記載してください。


回避策を適用する必要がある場合は、以前に移行アシスタントから受け入れた変更を破棄し、回避策を適用し、手動でアシスタントを呼び出して最初から変換を再試行して下さい。


Swift 3 移行変更の概要


Swift 3 には多くの重要な変更があり、移行ツールがそれであなたをお助けできます。Swift 3 の発展の提案の概要をここで見ることができます:https://github.com/apple/swift-evolution


よりインパクトのあるソース変更の概要を以下に示します。


API 設計ガイドライン


Objective-C API は、新しいSwift API 設計ガイドライン に従って Swift 3 にインポートされます。これは、SDK のインポート方法と Objective-C ユーザーフレームワークの両方に影響します。Swift 標準ライブラリには、ガイドラインを順守するための多くの変更点があります。詳細については、提案 SE-0005 - Objective-C API の Swift へのより良い翻訳 を参照してください。移行ツールは、新しいガイドラインに一致させるために、ユーザーが宣言した enum (列挙型) を小文字にしています。


SDK


CoreGraphics や Dispatch などの特定のフレームワークや Foundation からの他の型は、グローバル関数と変数のセットとしてではなく、それぞれの Swift 型のメンバー関数とプロパティとしてインポートされます。詳細については、SE-0044 - メンバーとしてのインポート と、SE-0088 - Swift 3 命名規則のための libdispatch の最新化 を参照してください。


Swift 3 では、基盤となる Foundation 型から "NS" 接頭辞が削除されつつあります。SE-0086 - Swift Foundation での NS 接頭辞の削除 を参照してください。


Swift 標準ライブラリ


コレクションのインデックス作成モデルは Swift 3 で劇的に変化しました。詳細は SE-0065 コレクションとインデックスの新しいモデル を参照してください。最も目に見える変化は、インデックスにはもはや successor()predecessor()advancedBy(_:)advancedBy(_:limit:)、または distanceTo(_:) メソッドが存在しないことです。その代わりに、それらの操作はコレクションに移され、コレクションは現在インデックスの増分と減分を担当しています。


myIndex.successor()  =>  myCollection.index(after: myIndex)
myIndex.predecessor()  =>  myCollection.index(before: myIndex)
myIndex.advance(by: …) => myCollection.index(myIndex, offsetBy: …)


もし移行ツールがインデックスを担当するコレクションを知らない場合は、コレクションに記入する必要のあるエディタのプレースホルダを挿入します。


コレクションの変更をサポートするために、Range 型にもいくつかの変更が加えられました。以前は x..<yx...y は同じ型の Range<T> を生成していました。今や、これらの式は、RangeCountableRangeClosedRangeCountableClosedRange の 4 つの型のいずれか一つを生成できます。私たちは RangeRangeClosedRange の型に分割して、型の最大値を含む閉じた範囲を作成します (たとえば、0...Int8.max が今は動作します)。単純な範囲型とそれらの ~Countable (カウント可能な) 相手は機能が異なります:


..<... 演算子は正しいことを行い、最も可能な範囲を返そうとします。つまり、for i in 1..<10 のようなコードは CountableRange を推測して動作し続けます。1 つの範囲型として型指定された変数があり、別の型を受け入れる API にそれを渡す必要がある場合は、変換する範囲型のイニシャライザを使用します。


var r = 0..<10 // CountableRange<Int>
Range(r) // converts to Range<Int>


言語


訳注: UnsafeRawPointer 移行ガイド は、Swift.org の中にありますが、消耗なので訳出しません。

移行後


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


関連する修正があるコンパイラエラーが表示されることがあります。移行ツールは Swift 3 コンパイラが提供する修正を組み込むように設計されていますが、これは 100% 動作することが保証されていません (特にターゲット間に依存関係がある場合)。


それがうまくコンパイルされたとしても、移行ツールが提供するコードは '理想的' ではないかもしれません。たとえば、'NS' の接頭辞付きの型 (NSRL での url) へのキャストを見ることができ、代わりに新しい URL 値の型で関連した API を使用するようにコードを再構築した方が良いでしょう。移行ツールが追加した新しいコメント (/* Migrator FIXME:... */) が表示される場合もあります。このコメントには、コードの変換方法に関するヒントが表示されます。


プロジェクトの移行中に発生する可能性がある問題のリストについては、既知の移行の問題 セクションを参照してください。


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


Xcode ワークスペースでプロジェクトと共にビルドされていない他のプロジェクトのバイナリの Swift モジュールを使用している場合は、以下のいずれかの移行方法から選択できます。


既知の移行の問題


Swift 標準ライブラリ


SDK



Swift 3 言語



その他






目次
Xcode の新機能

SwiftLogo
  • Swift 4.2 全メニュー

  • Swift プログラム言語

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

  • ブログ

  • Swift のダウンロード

  • 文書化
  • Swift 4 への移行

  • Swift 3 への移行
  • 移行前の準備
    Swift 移行アシスタント
    Swift 3 移行変更の概要
    API 設計ガイドライン
    SDK
    Swift 標準ライブラリ
    言語
    移行後
    Carthage/CocoaPods プロジェクトの使用 既知の移行の問題
    Swift 標準ライブラリ
    SDK
    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)












    トップへ(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)