はじめに(Part I)(Swift を ココア、Objective-C と共に使う)
基本設定
Swift は、Cocoa と Objective-C とのシームレスな互換性を提供するように設計されています。Swift 内で Objective-C API を使用したり、Objective-C 内で Swift API を使用できます。これは、Swift を開発のワークフローに統合するための、簡単で便利で強力なツールにします。
このガイドでは、Cocoa アプリを開発するときに有利に使用することができる、Swift と Objective-C の互換性の三つの重要な側面をカバーしています:
- 相互運用性 では、Swift と Objective-C のコードとの間のインターフェイスが出来るようになり、Objective-C で Swift のクラスを使用できるようにし、Swift のコードを書くときに Cocoa のクラスや、パターン、実践を活用することができます。
- ミックスマッチ を使用すると、相互に通信することができる、Swift と Objective-C のファイルの両方を含む混合した言語のアプリを作成できます。
- Swift への既存の Objective-C のコードからの 移行 は、最新の Swift の機能を使用して、Objective-C アプリの部分を置き換えることで、相互運用性と、ミックスマッチで簡単に作成できます。
これらの機能についての学習を始める前に、Cocoa のシステムフレームワークにアクセスできる Swift の環境を設定する方法の基本的な理解が必要です。
Swift 環境の設定
Swift を使用して Cocoa アプリ開発の経験を始めるには、提供された Xcode のテンプレートのいずれかから新しい Swift プロジェクトを作成します。
Xcode で Swift プロジェクトを作成するには
- [File] > [New] > [Project] > (iOS,watchOS,tvOS, または macOS) > [Application] > あなたの選んだテンプレート を選択します。
- [Language] ポップアップメニューをクリックして、Swift を選択します。
Swift プロジェクトの構造は、Objective-C プロジェクトとほぼ同一で、1つの重要な違いがあります。Swift にはヘッダファイルがありません。そこには実装とインタフェースの間に明示的な記述はないので、クラス、関数、定数に関するすべての情報は、単一の .swift ファイルに存在します。これについては、同じプロジェクトでの Swiftと Objective-C で詳しく説明します。
ここから、アプリのデリゲートに Swift のコードを書くことで実験を始めることができ、または、File > New > File > (iOS,watchOS,tvOS or macOS) > Source > Swift を選択して、新しい Swift のファイルを作成できます。
Swift のインポートプロセスの理解
Xcode プロジェクトを設定したら、Swift から Objective-C の作業を開始するために Cocoa または Cocoa Touch から任意のフレームワークをインポートできます。
任意の Objective-C のフレームワークまたは C のライブラリは、モジュール が Swift に直接インポートできるようにサポートします。これは Objective-C のシステムフレームワーク-Foundation や、UIKit、そして SpriteKit のように-だけでなく、システムに付属の共通の C ライブラリなどをすべて含んでいます。たとえば、Swift から Foundation API を使用するには、ファイルの先頭に、以下の import 文を追加して下さい。
<< SWIFT >>
import Foundation
このインポート文で、Foundation の クラス、プロトコル、メソッド、プロパティ、および定数を全て、Swift ファイルがアクセス可能になります。
インポートプロセスはまっすぐです。Objective-C フレームワークは、ヘッダファイル内の API を売り物にしています。Swift では、これらのヘッダファイルは、Objective-C モジュールにまでコンパイルされ、Swift API として Swift にインポートされます。このインポートプロセスが、Objective-C のコードで宣言された関数、クラス、メソッド、および型が Swift で現れる方法を決定します。関数やメソッドの場合、このプロセスは、それらの引数および戻り値の型に影響します。型の場合、インポートプロセスは、以下のことに影響します:
- 特定の Objective-C 型を Swift の同等のものに再マッピングします。id から Any のように
- 特定の Objective-C コアタイプを、Swift で代わりのものに再マッピングします。NSString から String のように
- 特定の Objective-C の概念を Swift の対応する概念に再マッピングします。ポインタから optionals のように
Swift の中で Objective-C を使用する方法の詳細については、Objective-C API との相互作用 を参照してください。
Objective-C の中に Swift をインポートするモデルは、Swift に Objective-C をインポートするのに使用したものと似ています。Swift はフレームワークからのような API を、Swift のモジュールとして売り物にしています。これらの Swift のモジュールは Objective-C ヘッダを生成しているのと並行して。これらのヘッダは Objective-C に戻ってマッピングすることができる API を売り物にしています。それらは、Objective-C では使用できない言語機能に梃入れをするため、一部の Swift API は Objective-C に戻ってマッピングしません。
Objective-C で Swift を使用する方法の詳細については、同じプロジェクトでの Swift と Objective-C を参照して下さい。
次:Objective-C の API との対話