OSX / iOSの新言語「Swift」の仕様アレコレ

こんにちは!エンジニアのTです。

最近は、Swiftの話題でIT業界も湧いていますね。
まあ、それはそうですよね!いきなりの新言語発表とあっては、その対応をどうするかで皆さん、てんやわんやしている事でしょう。

Xcode6から完全対応となりますので、それももうすぐです。それまでに、Swiftへ移行する為にいろいろとドキュメントを読み漁っている今日この頃です。

さて、前回このトンガルマンブログ初登場してくれたHNさんがSwiftの概要について書いてくれましたので、その時に紹介できなかった部分を、忘備録兼、自分への復習の意味も込めて書いていきます。

Tuple
タプル。複数の値を、一つにまとめる事ができます。

let myBook = ("タイトル", "制作者", "日付")
myBook.0 // "タイトル"
myBook.1 // "制作者"
myBook.2 // "日付"

各要素へ名前を付ける事もできます。
let myBook = (title: "タイトル", author:"制作者", date: "日付")
myBook.title // "タイトル"
myBook.author // "制作者"
myBook.date // "日付"

関数の戻り値に使う事もできるので便利ですね!
func getPrice() -> (Double, Double, Double) {
    return (1.0, 2.0, 3.0)
}

あまり複雑なデータ構造には向かないと思いますが、いろいろ応用が効きそうです。

Generics
ジェネリックス。総称型とも言う。JavaやC#等にもある。
使う機会が結構多いので、ありがたいです。

// 特定の型を持つディクショナリー
let myDic = Dictionary<String, float>()

// 任意の型を引数に取り、その値を入れ替える関数
func swapTwoValues<T>(inout a: T, inout b: T) {
    let temporaryA = a
    a = b
    b = temporaryA
}

Overload(演算子のオーバーロード)
演算子をオーバーロードして独自の定義を作る事ができます。

struct Vector2D {
    var x = 0.0,  y = 0.0
}

@infix func + (left: Vector2D, right: Vector2D) -> Vector2D {
    return Vector2D(x: left.x + right.x, y: left.y + right.y)
}

Optional Chaining
Optional Value(任意型変数)
変数や定数に対して、任意型として宣言する事が出来ます。
?を使うと任意型(Optional)となり、nilを代入する事が許容されます。!を使うとnilは許容されず、実行時エラーになります。

// PersonクラスにはResidenceを任意型(Optional)として定義
class Person {
    var residence: Residence?
}

class Residence {
    var numberOfRooms = 1
}

let john = Person()

// !を使っているのでnilが許容されずにエラー
let roomCount = john.residence!.numberOfRooms

// roomCountにnilかどうか判定して、条件分岐
if let roomCount = john.residence?.numberOfRooms {
    println("John's residence has \(roomCount) room(s).")
} else {
    println("Unable to retrieve the number of rooms.")
}


まだまだほんの一部ですが、Objective-Cと比べてかなりモダン(?)な仕様になったと思います。Swiftにスムーズに移行する事ができれば、コーディングする量も劇的に減ると思いますので、より生産性が上がるのではないでしょうか?後は、iOS8のUI部分等がどのように変わるかですね。画面解像度が大きく上がるのではないか、と言われていますので、レイアウト周りは相変わらず苦労する事になりそうです。


Xcode6の正式リリースまで楽しみと不安が止まらないです!


トンガルマンWebサイト
https://tongullman.co.jp/index.php
facebook
https://www.facebook.com/Tongullman

0 件のコメント:

コメントを投稿