*

Apple公式Swiftドキュメントが追加。Objective-Cや既存APIとの連携について解説

公開日: : ニュース, 役立ち情報 ,

Swift言語についてのAppleの最初の公式マニュアル

WWDC2014でのSwift言語の登場アナウンス以降、AppleはiBooksを使ってSwift言語のマニュアル”The Swift Programming Language”を配布している。こちらを入手するには、勿論iBooksと対応OSが必要となる、というのは以前の紹介のとおり。
ただ、こちらのマニュアルはこっそりとWEB上の公開領域にも上げられていた。最初にiBooks限定で公開したのは、単純にインストールベースを増やしたかったからだろう。したがって、現在では他のOSや旧iOS/OSX使いでも言語仕様などについて一瞥、把握する事ができるようになっている。

The Swift Programming Language

SwiftとObjective-C、既存APIとの連携マニュアルが追加

先日6月15日には、同様にして公式マニュアル第2段が公開領域に上げられた。タイトルは”Using Swift with Cocoa and Objective-C”。こちらのマニュアルでは、それまでObjective-Cを使用してiOS/OSXアプリケーションを開発していた人向けに、SwiftからObjective-C、あるいはその逆を呼び出す仕組みや、移行にあたってのノウハウなどが語られている。

Using Swift with Cocoa and Objective-C

SwiftとObjective-Cの共存は可能。しかし…

第2段の内容は、WWDCで語られていた通り、SwiftとObjective-Cのコードは混在する事が可能というものだ。片方の言語で書かれたクラスをもう片方から呼び出して、あたかも読み込んだ側の言語で書かれたクラスとしてシームレスに利用する事が可能となっている。
ご存知の通り、C言語の上にオブジェクト指向を建て増したObjective-Cでは、プロトタイプ宣言の.hファイルと、実装部分の.mファイルの2種類が必要であった。それに対してSwiftの場合は.swiftファイル1種類があるのみであるが、言語を横断して利用する場合には、これらのファイルに加えて変換のための別のヘッダファイル(必要タイミングでXcodeによって用意される)を付け加える事となる。この辺りで混乱しているユーザをどうも多く見る。

SwiftとObjective-Cの共存方法をマニュアルより

まず、同一ターゲット内での共存方法。Objective-CクラスをSwiftで利用する場合には、(プロダクトモジュール名)-Bridging-Header.hというファイルを作成することになる。プロジェクト内でObjective-CファイルとSwiftファイルが混在したタイミングにXcodeでダイアログが出て、自動的にこのファイルを作成してくれるのだが、作成されたファイル内で利用したいクラスの.hファイルを明示的にimportする必要がある。そうすれば、以降はSwiftコード内でのimport無しで定義済みのクラスとしてインスタンスが作成できる(ターゲットがフレームワークの場合には、Bridging Headerは使わず、umbrellaヘッダーで利用したいクラスの.hファイルを明示的にimportすることになる)。
SwiftクラスをObjective-Cで利用する場合には、(プロダクトモジュール名)-Swift.hというファイルが勝手に作成されているので、今度はこれを通常のObjective-Cクラスの.hファイルと同じように.mファイル中でimportして実装する。ターゲットがフレームワークの場合も同じ。
続いて、別のターゲットの外部フレームワークを読み込む場合。これはなんと、そのフレームワークがどの言語か、あるいは言語混在状態で書かれていようが、通常の外部フレームワーク読み込みと同じ方法で読み込む事ができる(まあ、そんなに驚く事ではないか)。

SwiftクラスをObjective-Cクラスとして使う際の注意点

一点だけ注意点があって、Objective-Cクラスを継承していないSwiftクラスをObjective-C側から使おうとする場合、Swiftファイル側でクラス名・プロパティ名・メソッド名のそれぞれの前に@objc属性でObjective-C側から呼び出される際の名称を宣言しなくてはいけない。

@objc(ClassName)
class ClassName {
//Swiftコードによる処理実装
}

このようにすると、Objective-C側からClassNameという名前で呼び出す事ができるようになる。今回発表されたSwiftの新機能で、アルファベット以外(日本語や中国語や絵文字やら)の名前をクラス名、プロパティ名などに使えるようになったというものがあったが、Objective-C側では対応していないので、Objective-C側から呼び出せる名称をつける際にも@objc属性を使う。
@objcをいちいち書き込むのも面倒なので、おそらくほとんどの場合はNSObjectなどのObjective-Cクラスを継承する形になるだろう。

class ClassName: NSObject {
//Swiftコードによる処理実装
}

Objective-Cクラスを継承すると、@objcの辺りの処理を自動的にやってくれるわけである。
ちなみにSwiftクラスをObjective-C側に読み込んで、その子クラスを作る事はできないようだ。

関連記事

no image

iMac21.5インチエントリモデルが108,800円で登場&Xcode6 beta2のリリース

iOS/OSXプログラミング用に、手頃な価格で買えるMac一式を探している向きには朗報だろうか。Ap

記事を読む

no image

AppleがSwift情報を発信する公式ブログを開始 そしてXcode6 betaは無償ダウンロード可に

長年のAppleウォッチャーほど、さほど驚きなく受け容れられるニュースかもしれない。 Appl

記事を読む

OSXの画面の共有

iOSアプリ作成の第一段階として…まずXcodeが動く本体を購入しよう

iOSのための開発をXcodeで行うと決めたところで、まず必要になるのはMac本体だ。Xcodeは残

記事を読む

no image

Swift1.0を含むXcode6のGMが公開

大体2週間の間隔を空けてbetaのヴァージョンナンバーが上がり続けていたXcode。9月9日のiOS

記事を読む

no image

Swiftのアーリースターターのための情報&便利なサイト

Swiftが発表された!さあ習得するぞ!と意気込んでも、まだベータ版の状態であるXcode 6をAp

記事を読む

no image

Appleが新開発言語のSwiftを発表!とりあえずサイトを作ってみた

2014年の6月2日(日本時間6月3日)に行われたWWDC2014の基調講演で、Apple社が新開発

記事を読む

RunSwiftスクショ

WEB上で動作するSwiftの疑似実行環境 RunSwift・SwiftStub

Swiftの実行環境はMac+Xcode。ウワサのSwift言語に興味があっても、Macを所有してい

記事を読む

no image

待望のRetina iMacが登場! iOSアプリの開発が楽になる?

10月16日(日本時間17日)に行われたAppleの新製品発表会。大方の予想通り(リーク情報通り)i

記事を読む

no image

Swiftの参考書 電子書籍以外にもボツボツと登場

書店の棚に並んでいるSwift本を見て、正式リリースを実感! 何しろまだXcode6がbetaの頃

記事を読む

no image

WordPressプラグインCrayon Syntax HighlighterがSwiftに対応!

WordPressブログでSwiftのコードを紹介する際に、これまでは新言語ゆえにコードのハイライト

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

no image
Swiftが今年後半を目処にオープンソース化!そしてSwift 2

一時期iOSとOSXの開発からは離れていたけれど、久しぶりの大きなニュ

RunSwiftスクショ
WEB上で動作するSwiftの疑似実行環境 RunSwift・SwiftStub

Swiftの実行環境はMac+Xcode。ウワサのSwift言語に興味

no image
待望のRetina iMacが登場! iOSアプリの開発が楽になる?

10月16日(日本時間17日)に行われたAppleの新製品発表会。大方

no image
Swiftの参考書 電子書籍以外にもボツボツと登場

書店の棚に並んでいるSwift本を見て、正式リリースを実感! 何しろ

no image
Swift1.0を含むXcode6のGMが公開

大体2週間の間隔を空けてbetaのヴァージョンナンバーが上がり続けてい

→もっと見る

PAGE TOP ↑