フェンリル

Developer's Blog

Swift でもう一度 iOS/OS X アプリ開発に挑戦してみませんか?

Swift-apple

こんにちは。開発担当の木村です。

今年も毎年恒例の一大イベント WWDC が開催されました。
iOS 8 や OS X 10.10 とあわせて4000を超える API が発表され、
開発者のためのイベントとして、例年以上にふさわしい内容だったのではないでしょうか。

中でも私がビビッと来たトピックスは新言語「Swift」の発表です。
これまで Objective-C で開発してきた iOS / OS X アプリがどう変わっていくのか、楽しみで仕方ありません。

iOS / OS X アプリを開発しようと思ったけど、Objective-C がわかりづらくて諦めた。。。
そんな方々も Swift でもう一度  iOS/OS X アプリの開発に挑戦してみませんか。

変数

NSInteger,NSString…と Objective-C のクラスライブラリは独特の型を持っています。
いつも使っている型にNS というプレフィックスが付いているだけで、
何か近寄りがたいオーラを感じた方もいるかもしれません。

//Objective-C
NSString* city = @"Oska";
NSInteger age = 20;
Float height = 190.6f;

これが Swift だとこうなります。

//Swift
var city = "Osaka"
var age = 20
var height = 190.6

型を推論してくれるようになったおかげで先ほどの心配もしなくて良くなりました。
ただし、推論なんて信用出来ない!型がないと落ち着かない!という方は、明示的に指定できます。

//Swift
var city:String = "Osaka"
var age:Int = 20
var height:Float = 190.6

見慣れた型が使えて一安心ですね。

メソッド

メソッドの定義も Objective-C は独特ですよね。
特に引数が2つ以上ある場合のメソッド定義は複雑です。

//Objective-C
(NSString *)greet:(NString *)name label:(int)age { 
    return [NSString stringWithFormat:@"My name is %@.I'm %d years old.", name, age];
} 

 Swift ではどうでしょうか。

//Swift
func greet(name: String, age: Int) -> String { 
    return "My name is \(name).I'm \(age) years old."
}

ずいぶんとスッキリとした書き方ができますね。
Objective-C ではメソッドを呼び出す際にメッセージ式で記述していましたが、Swift では他の言語と同じような書き方でメソッド呼び出しができるようになっています。
Swift では式展開などの文字列操作も簡単になりました。

Objective-C でクロージャを書くためには記号を使う必要があったり、メソッドの呼び出しとは違う書き方で呼び出す必要があったりと少しわかりづらくなっています。
しかし、 Swift ではメソッド呼び出しと同じ書き方でクロージャを実装できます。

クラス

Objective-C ではあるクラスからインスタンスを生成するにも独特の書き方が必要でした。
Hoge クラスのインスタンス hoge を生成するためには

//Objective-C
Hoge* hoge = [[Hoge alloc] init];

と書きます。

一方、 Swiftでは

//Swift
var hoge = Hoge()

と書けます。簡単ですね。
Objective-C では alloc でインスタンスを生成し、init で初期化するという流れでインスタンスを生成しています。
それに比べて、Swift ではサクッと書けるようになっており、イニシャライザを手動で記述する手間も省けていますね。

Objective-C のクラスは宣言部(hoge.h)と実装部(hoge.m)に分かれていました。
Swift ではヘッダファイルが無くなったため、いきなり実装部から書き始められます。

注意点

ここまで Objective-C より良くなった点について挙げてきましたが、 Objective-C から Swift への移行で注意しなければならない点もあります。
その一つとして引数付きの関数・メソッド呼び出す際のバリエーションについて挙げてみます。

Objective-C におけるメソッドは以下の形式で呼び出します。

 [object messageWithArg:arg1 andArg:arg2]

実際にコードを書いてみると以下のようになります。

//メソッド
[object colorWithRed: 1.0 green: 0.0 blue: 1.0]; 

//イニシャライザ
[[Color alloc] initWithColor:1.0 green: 0.0 blue: 1.0]; 

//関数
pow(2, 3)

メソッドとイニシャライザは同じ書き方であることがわかります。
同じコードを Swift で書いてみます。

//メソッド
object.color(1.0, green: 0.0, blue: 1.0)

//イニシャライザ
Color(red: 1.0, green: 0.0, blue: 1.0)

//関数
pow(2, 3)

関数の呼び出し方は Objective-C と同じです。
しかし、メソッドとイニシャライザの呼び出し方が少し変わりました。
Swift では引数の指定方法のバリエーションが増えたことで、少し複雑になっていますね。

・関数の場合

メソッド名 (引数1, 引数2, 引数3)

・メソッドの場合

オブジェクト名.メソッド名 (引数1, ラベル1:引数2, ラベル2:引数3)

・イニシャライザの場合

クラス名 (ラベル1:引数1, ラベル2:引数2, ラベル3:引数3)

Swift に比べて Objective-C の方がシンプルな形でメソッドを呼び出せます。

他にも、Swift では動的な処理を実装するための NSInvocation や performSelector が呼び出せなくなりました。
しかし、Swift は Objective-C で書かれた資産を利用できるため、上記の処理を Objective-C で記述すれば解決できます。

現段階では Objective-C は切っても切れない言語であることは間違いないですね。
Swift を使うと必ずしもいいことばかりというわけではありませんが、Objective-C のようにバージョンアップを重ねていくことで現状の問題をクリアしてくれることを期待しましょう。

まとめ

いかがでしたか?
ここまで Objective-C に苦手意識があった方たちのために、基本的な部分の書き方を解説しました。Swift は全く新しい書き方を求められているのではなく、他の言語と似ている部分も多々あります。そのため、あれ?この書き方どこかで見たことあるぞ?と感じた方も多いのではないでしょうか。

もっと Swift について知りたくなった!という方は Apple 公式の情報も合わせてご覧ください。

Swift – Apple Developer

まだまだ Swift の良い点はたくさんあります。
正式にリリースされればもっと多くの情報が飛び交うようになるでしょう。   
一度 Objective-C に挫折してしまった方もこの機会に再チャレンジしてみてはいかがでしょうか。

 

フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!

 

Facebook コメント

コメント

必須2014年06月12日 2:29

NSString* city = "Oska";
は@が要りませんか?

kimura2014年06月12日 10:49

ご指摘の箇所を修正いたしました。
コメントをいただき、ありがとうございました。

Objective-Cで挫折したあなた、swiftでiOSアプリに再挑戦してみては? - #就活SWOT2014年10月16日 16:24

[…] Swift でもう一度 iOS/OS X アプリ開発に挑戦してみませんか? […]

これは2010年に自身への機械的なセイコースポーツ腕時計です。純粋に機械的な春のドライブに対する米国に拠点を置くアナンタ腕時計運動を代表して、この2010年の自動巻きクロノグラフ参2016年03月01日 12:24

[url=http://www.gginza.com/%E6%99%82%E8%A8%88/%E3%83%AD%E3%83%AC%E3%83%83%E3%82%AF%E3%82%B9/gmt/36661e9d1fbe59d2.html]これは2010年に自身への機械的なセイコースポーツ腕時計です。純粋に機械的な春のドライブに対する米国に拠点を置くアナンタ腕時計運動を代表して、この2010年の自動巻きクロノグラフ参照srq009チタンに対する新しい。私が最初にこれを見たとき、私はそれを見て、限定版になるということをかなり確信しました、しかし、それはそうチタンアナンタ自動セイコーのハイエンドの世界市場の自動の非常にスポーティなバージョンを提供している普通のコレクションの一部です。スーパーコピー時計ブランド私はそれに私の手を得て、それをチェックすることができました、そこで、それはかなりセクシーな探してそれの画像をここで見ることができます。私が言うことができることはかなり素晴らしいですが、炭素繊維ダイヤル腕時計は、私が好きである![/url]

鋼のや金のバージョンがとても類似しているので、私は彼らが両方ともである性質のいくつかを議論するのを許します。第1のケースのサイズは、古典的なオメガスピードマスタームーンウ2016年03月01日 12:25

[url=http://www.bagkakaku.com/vuitton_bag/2/N51210.html]鋼のや金のバージョンがとても類似しているので、私は彼らが両方ともである性質のいくつかを議論するのを許します。第1のケースのサイズは、古典的なオメガスピードマスタームーンウォッチスタイルの場合には適度の39.7mmワイドである。オメガ・ブラウンのストラップで彼らとペアを選びましたが、この場合において、白のコントラスト縫い目による美しいマットアリゲーターストラップ。ちょうど下の40 mmのワイドで、この服装腕時計のようにたくさん着、フォーマルな服装と長いそでのために良いことだが、その古典的な観察を絶え間なくオメガスピードマスターがまだあります。[/url]

名前(必須)

メールアドレス(必須)

URL

スタイル用のタグが使えます