Swift移行時に引っかかりそうなことを解決する!

第2回 Objective-Cとの違いからSwift言語を学ぶ

この記事を読むのに必要な時間:およそ 4.5 分

はじめに

前回の記事を入稿した直後に,スタンフォード大学がSwiftでのiOSアプリの開発講座をiTunes Uで公開したとの記事を読みました。さらっと観たのですが,SwiftだけではなくXcodeの使い方やStoryboardでのレイアウトの方法など,iOSアプリケーション開発全般の講義となっています。英語ではありますが,無料なので試しに受講してみはいかがでしょうか。

前回はSwiftを学ぶための情報源の紹介と,素早くSwiftを試すことのできるPlaygroundについてご紹介しました。

第2回の今回は,Swift言語について,Objective-Cとの違いを中心にご紹介したいと思います。

変数(varとlet)

// Objective-C
NSInteger i = 0;

// Swift
var i = 0

Swiftの場合,変数の宣言はvarで始まります。型の指定はありませんが,値から型を推論してくれるため省略できます。きちんと書くならば,

// Swift
var i : Int = 0

と言うように,変数の後ろにコロンで区切って型を記述します。また,

// Swift
let n = 10

のように,let で宣言すると,値を変更できない定数として扱われます。

// Objective-C
const NSInteger n = 10;

と同じですが,Swiftのほうがより簡単に記述できます。

Objective-Cでは明らかに定数の場合ぐらいしかconstを使いませんでしたが,Swiftではインスタンス化したオブジェクトにはletを使うケースが多いです。Swiftでは,基本letを使用し,値を変更する可能性がある場合のみvarを使用する,という考えのほうが良いでしょう。

真偽値と数値

Int以外にも一般的な言語で提供されているような数値型が提供されています。

// Swift
var flag          = true      // Bool    (BOOL)
var point : UInt  = 100       // UInt    (NSUInteger)
var star  : float = 3.5       // float   (float)
let pi            = 3.141592  // Double  (double)

上記のうち,BoolとDoubleは型推論が可能なので,宣言を省略できます。ちなみにBool型はYES/NOからtrue/falseになっています。

文字列(String)

Swiftに切り替えることの一番のメリットは,文字列の扱いが楽になったことと言っても過言ではないでしょう。

// Objective-C
NSString *hello      = @"Hello";
NSString *world      = @"World";
NSString *helloWorld = [NSString stringWithFormat:@"%@, %@!", hello, world];

// Swift
let hello      = "Hello"
let world      = "World"
let helloWorld = "\(hello), \(world)!"  // Hello, World!

まず文字列の先頭からアットマーク「@」がなくなりました。そして,文字列内に変数を埋め込むことができるようになりました。上記の例のように,バックスラッシュに続けて括弧の中に変数を直接記述できます。

もちろん,下記のような直感的な文字列演算も可能です。

// Swift
let helloWorld = hello + ", " + world + "!"

文字列はString型で,上記コードでも型推論による宣言の省略がされています。

このStringはNSStringと互換性があり,NSStringを引数に取るメソッドにもそのまま渡すことがきます。また,NSStringのメソッドも(ほぼ?)実装されているので,Objective-Cで使い慣れてきたメソッドも引き続き利用できます。

// Swift
helloWorld.hasPrefix("Hello")  // true

ちなみにご覧のとおり,C言語からの名残だったポインタを示すアスタリスク「*」はSwiftでは不要です。

著者プロフィール

ogaoga

電機メーカーでソフトウェアエンジニア,UIデザイナーとして様々なプロダクトの開発に従事。現在は,IT企業でフロントエンドエンジニアとして,社内の開発環境の整備や標準化などを推進している。趣味でiOSアプリやWebアプリを開発。

コメント

コメントの記入