Article

Migrating Your Objective-C Code to Swift あなたのObjective-Cコードのスウィフトへの移行

Learn the recommended steps to migrate your code. あなたのコードを移行するための推奨される段階を学んでください。

Overview 概要

You can improve the architecture, logic, and performance of one of your Objective-C apps by replacing pieces of it in Swift. Interoperability makes it possible to integrate features migrated to Swift into Objective-C code with no hassle. You don't need to rewrite your entire app in Swift at once. あなたは、あなたのObjective-Cアプリのうちの1つのアーキテクチャ、論理、そして性能を、それの幾つかの区画を置き換えることによって改善できます。相互運用性は、Swiftに移される特徴を、面倒なしでObjective-Cコードに統合することを可能にします。あなたは、あなたのアプリ全体を一度にSwiftに書き直す必要はありません。

Clean Up Your Code あなたのコードを掃除する

Make sure that your Objective-C code and Swift code have optimal compatibility by tidying up and modernizing your existing Objective-C codebase. For example, if there are parts of your codebase to which you haven't added nullability annotations, now's the time to add them. Make sure your code follows modern coding practices so that it interacts more effectively with Swift. あなたのObjective-CコードとSwiftコードが最善の互換性を持つことを、あなたの既存のObjective-Cコード基盤を整頓および近代化することによって確かにしてください。例えば、ヌル可能性注釈を加えてないなあなたのコード基盤の部分があるならば、今こそそれらを加える時です。あなたのコードが近代的コード慣行に従うことを確かにしてください、それでそれはより効果的にSwiftと相互作用します。

Migrate Your Code あなたのコードを移行する

The most effective approach for migrating code to Swift is on a per-file basis—that is, one class at a time. Because you can’t subclass Swift classes in Objective-C, it’s best to choose a class in your app that doesn’t have any subclasses. You’ll replace the .m and .h files for that class with a single .swift file. Everything from your implementation and interface goes directly into this single Swift file. You won’t create a header file; Xcode generates a header automatically in case you need to reference it. スウィフトへの移っているコードのために最も効果的なアプローチは、ファイル毎原則の上にあります ― すなわち、一度にひとつのクラス。あなたがスウィフトクラスをObjective-Cにおいてサブクラス化できないので、あなたのアプリにおいて全くサブクラスを持たないクラスを選択するのは最も良いことです。あなたは、そのクラスのための.m.hファイルを単一の.swiftファイルで置き換えます。あなたの実装とインタフェースからのすべては、直接この単一のスウィフトファイルに入ります。あなたはヘッダ・ファイルを作成しません;あなたがそれに参照をつける必要がある場合に備えて、Xcodeが自動的にヘッダを生成します。

  1. Create a Swift class for your corresponding Objective-C .m and .h files by choosing File > New > File > (iOS, watchOS, tvOS, or macOS) > Source > Swift File. You can use the same or a different name than your Objective-C class. Class prefixes are optional in Swift. あるSwiftクラスをあなたの対応するObjective-C .m と .h ファイルに対して、「File > New > File > (iOS、watchOS、tvOS、またはmacOS) > Source > Swift File」を選択することによって作成してください。あなたは、あなたのObjective-Cクラスと同じまたは異なる名前を使用することができます。クラス接頭辞は、スウィフトでは随意です。

  2. Import relevant system frameworks. 関連のあるシステムフレームワークをインポートしてください。

  3. Fill out an Objective-C bridging header if you need to access Objective-C code from the same app target in your Swift file. Objective-Cブリッジヘッダを記入してください、もしあなたがObjective-CコードにあなたのSwiftファイルにおいて同じアプリターゲットからアクセスする必要があるならば。

  4. To make your Swift class accessible and usable back in Objective-C, make it a descendant of an Objective-C class. To specify a particular name for the class to use in Objective-C, mark it with @objc(name), where name is the name that your Objective-C code uses to reference the Swift class. あなたのSwiftクラスを逆にObjective-Cにおいてアクセス可能および利用可能にするには、それをObjective-Cクラスの子孫にしてください。特定の名前をクラスに対して指定してObjective-Cで使うには、それを@objc(name)で印してください、ここでnameはあなたのObjective-CコードがSwiftクラスを参照するのに使う名前です。

As You Work あなたが作業するとき

  1. You can set up your Swift class to integrate Objective-C behavior by subclassing Objective-C classes, adopting Objective-C protocols, and more. あなたは、あなたのスウィフトクラスをObjective-Cクラスのサブクラスにすること、Objective-Cプロトコルを採用すること、そしてもっと多くのことによって、Objective-C挙動に溶け込むように準備することができます。

  2. As you work with Objective-C APIs, you’ll need to know how Swift translates certain Objective-C language features. For more information, see Objective-C and C Code Customization. あなたがObjective-C APIを扱うとき、あなたはスウィフトがどのように特定のObjective-C言語機能を翻訳するか知っている必要があります。詳細は、Objective-CとCコードのカスタム化を見てください。

  3. Use the @objc(name) attribute to provide Objective-C names for properties and methods when necessary. @objc(name)属性をObjective-C名をプロパティとメソッドに必要に応じて用意するために使ってください。

  4. Denote instance (-) and class (+) methods with func and class func, respectively. インスタンス(-)およびクラス(+)メソッドであることを、それぞれfuncおよびclass funcで示してください。

  5. Declare simple macros as global constants, and translate complex macros into functions. 単純なマクロをグローバルな定数として宣言してください、そして複雑なマクロを関数へと翻訳してください。

After You Finish あなたがやり終えたあと

  1. Update import statements in your Objective-C code (to #import "ProductModuleName-Swift.h") to refer to your new Swift code. あなたのObjective-Cコードにおいてインポート文を更新して(#import "ProductModuleName-Swift.h"へと)、あなたの新しいSwiftコードを参照するようにしてください。

  2. Remove the original Objective-C .m file from the target by deselecting the target membership checkbox. Don’t delete the .m and .h files immediately; use them to troubleshoot. ターゲットから本来のObjective-C .mファイルを、ターゲットメンバーシップ・チェックボックスの選択を外すことによって取り除いてください。.m.hファイルを直ぐに削除しないでください;それらを不具合対処のために使ってください。

  3. Update your code to use the Swift class name instead of the Objective-C name if you gave the Swift class a different name. あなたがスウィフトクラスに異なる名前を与えるならば、Objective-C名でなくてスウィフトクラス名を使用するようにあなたのコードを更新してください。

Troubleshooting Tips and Reminders 問題解決の秘訣と注意

Migration experiences differ depending on your existing codebase, but here are some general steps and tools to help you troubleshoot the process: 以降体験はあなたの既存のコード基盤に依存して異なります、しかしここにその過程の問題をあなたが解決する助けとなるいくつかの一般的な段階とツールがあります。

  • Remember that you can't subclass a Swift class in Objective-C. Therefore, the class you migrate can't have any Objective-C subclasses. あなたがObjective-CにおいてSwiftクラスをサブクラス化できないことを忘れないでください。したがって、あなたが移行するクラスは、いかなるObjective-Cサブクラスも持つことができません。

  • Once you migrate a class to Swift, you must remove the corresponding .m file from the target before building to avoid a duplicate symbol error. 一旦あなたがあるクラスをスウィフトに移行したならば、あなたは、ビルドの前にそのターゲットから対応する.mファイルを取り除いて重複シンボル・エラーを避けなければなりません。

  • To make a Swift class available in Objective-C, make it a descendant of an Objective-C class. SwiftクラスをObjective-Cで利用可能にするには、それをObjective-Cクラスの子孫にしてください。

  • Command-click a Swift class name to see its generated header. スウィフトクラス名をコマンド-クリックして、その生成ヘッダを見てください。

  • Option-click a symbol to see implicit information about it, like its type, attributes, and documentation comments. シンボルをオプション-クリックして、それに関する暗黙表示の情報、その型、属性、そして注釈文書などを見てください。

See Also 参照

Language Interoperability 言語互換性