Guides and Sample Code

Developer

Using Swift with Cocoa and Objective-C (Swift 4.1)

iBooks
On This Page

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

Migration provides an opportunity to revisit an existing Objective-C app and improve its architecture, logic, and performance by replacing pieces of it in Swift. For a straightforward, incremental migration of an app, you’ll be using the tools learned earlier—mix and match plus interoperability. Mix-and-match functionality makes it easy to choose which features and functionality to implement in Swift, and which to leave in Objective-C. Interoperability makes it possible to integrate those features back into Objective-C code with no hassle. Use these tools to explore Swift’s extensive functionality and integrate it back into your existing Objective-C app without having to rewrite the entire app in Swift at once.
移行は、既存のObjective-Cアプリを再検討するための、およびその設計仕様、論理、そして性能をそれの一部をスウィフトにおいて取り替えることによって向上させるための機会を提供します。アプリのわかりやすい、徐々に進める移動のために、あなたは以前に学んだいくつかの手段を使用することになります ― 混合と適合それに相互運用性。混合と適合の機能性は、どの特徴と機能性をスウィフトにおいて実装するか、そしてどれをObjective-Cのままにしておくべきかを選択をするのを容易にします。相互運用性は、それらの特徴をObjective-Cコードに逆に戻って統合することを面倒なしで可能にします。これらのツールを使用して、スウィフトの広大な機能性を調査して、いっぺんにスウィフトでアプリ全体を書き直ししなくとも、それをあなたの既存のObjective-Cアプリに逆に組み込んでください。

Preparing Your Objective-C Code for Migration
移動のためのあなたのObjective-Cコードの準備

Before you begin migrating your codebase, make sure that your Objective-C and Swift code has optimal compatibility. This means tidying up and modernizing your existing Objective-C codebase. Your existing code should follow modern coding practices to make it easier to interact with Swift seamlessly. For a short list of practices to adopt before moving forward, see Adopting Modern Objective-C.
あなたがあなたのコードベースを移行し始める前に、あなたのObjective-Cとスウィフトコードが最適の互換性を持つことを確かにしてください。これは、あなたの既存のObjective-Cコードベースを整えて、現代化することを意味します。あなたの既存のコードは、継ぎ目なくスウィフトと相互に作用することをより簡単にするために、現代のコード記述慣行に従わなければなりません。前進する前に採用するべき短い慣行リストとして、現代のObjective-Cを採用するを見てください。

The Migration Process
移動プロセス

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が自動的にヘッダを生成します。

Before You Start
あなたが始める前に

  • 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.
    スウィフトクラスをあなたの対応するObjective-Cの.m.hファイルのために、File > New > File >(iOS、watchOS、tvOS、またはmacOS)> Source > Swift Fileを選ぶことによって作成してください。あなたは、あなたのObjective-Cクラスと同じまたは異なる名前を使用することができます。クラス接頭辞は、スウィフトでは随意です。

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

  • Fill out an Objective-C bridging header if you need to access Objective-C code from the same app target in your Swift file. For instructions, see Importing Code from Within the Same App Target.
    あなたがあなたのスウィフトファイルにおいて同じアプリターゲットからのObjective-Cコードにアクセスする必要があるならば、Objective-C橋渡しヘッダに記入してください。手順指示のために、コードを同じアプリターゲットからインポートするを見てください。

  • 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. For more information on @objc, see Swift Type Compatibility.
    あなたのスウィフトクラスをObjective-Cから逆にアクセス可能および使用可能にするために、それをObjective-Cクラスの子孫にしてください。クラスに対してObjective-Cで使うために特定の名前を指定するために、それを@objc(name)で印してください、そこにおいてnameはあなたのObjective-Cコードがスウィフトクラスを参照するために使う名前です。@objcの詳細については、スウィフト型互換性を見てください。

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

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

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

  • When writing Swift code that incorporates Cocoa frameworks, remember that certain types are bridged, which means you can work with Swift types in place of Objective-C types. For more information, see Working with Cocoa Frameworks.
    ココア・フレームワークを取り入れるスウィフトコードを書くとき、特定の型が橋渡しをされるのを思い出してください、それはあなたがスウィフト型をObjective-C型の代わりに扱うことができるのを意味します。詳細は、ココアフレームワークを扱うを見てください。

  • As you incorporate Cocoa patterns into your Swift class, see Adopting Cocoa Design Patterns for information on translating common design patterns.
    あなたがココアパターンをあなたのスウィフトクラスに組み込むとき、ココア・デザインパターンの採用を一般的なデザイン・パターンを翻訳することに関する情報のために見てください。

  • For considerations on translating your properties from Objective-C to Swift, read Properties in The Swift Programming Language (Swift 4.1).
    スウィフトにあなたのプロパティをObjective-Cから翻訳することでの配慮について、プロパティスウィフトプログラミング言語(Swift 4.1)で読んでください。

  • Use the @objc(name) attribute to provide Objective-C names for properties and methods when necessary. For example, you can mark a property called enabled to have a getter named isEnabled in Objective-C like this:
    @objc(name)属性をObjective-C名をプロパティとメソッドに必要に応じて用意するために使ってください。例えば、あなたはenabledと呼ばれるあるプロパティを、以下のように印してObjective-CにおいてisEnabledと名前をつけられるゲッターを持つようにできます:

    1. @objc var enabled: Bool {
    2. @objc(isEnabled) get {
    3. // ...
    4. }
    5. }
  • Denote instance (-) and class (+) methods with func and class func, respectively.
    インスタンス(-)およびクラス(+)メソッドであることを、それぞれfuncおよびclass funcで示してください。

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

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

  • Update import statements in your Objective-C code (to #import "ProductModuleName-Swift.h"), as described in Importing Code from Within the Same App Target.
    あなたのObjective-Cコードにおいてインポート文を更新してください(#import "ProductModuleName-Swift.h"へと)、コードを同じアプリターゲットからインポートするで記述されるように。

  • 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ファイルを直ぐに削除しないでください;それらを不具合対処のために使ってください。

  • 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
問題解決の秘訣と注意

Even though each migration experience is different depending on your existing codebase, there are some general steps and tools to help you troubleshoot your code migration:
たとえそれぞれの移行体験があなたの既存のコードベースに従い異なるものではあっても、あなたのコード移行の問題解決を助けるいくつかの一般的な取るべき段階と手段があります:

  • Remember that you cannot subclass a Swift class in Objective-C. Therefore, the class you migrate cannot have any Objective-C subclasses in your app.
    あなたがObjective-Cにおいてスウィフトクラスをサブクラス化することができないことを忘れないでください。したがって、あなたが移行するクラスは、あなたのアプリにおいて1つも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 be accessible and usable in Objective-C, a Swift class must be a descendant of an Objective-C class.
    Objective-Cでアクセス可能で利用可能であるために、スウィフトクラスはObjective-Cクラスの子孫でなければなりません。

  • When you bring Swift code into Objective-C, remember that Objective-C won’t be able to translate certain features that are specific to Swift. For a list, see Using Swift from Objective-C.
    あなたがObjective-Cにスウィフトコードを連れて来るとき、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.
    シンボルをオプション-クリックして、それに関する暗黙表示の情報、その型、属性、そして注釈文書などを見てください。