*

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

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

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

記事を読む

RunSwiftスクショ

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

Swiftの解説書は電子書籍方面で出始めたみたい

一応まだ言語仕様が固まっていないと思われる、Swift。2014年6月2日、WWDCでの登場から大盛

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

OSXの画面の共有

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

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 ↑