Swift (iOS/OSX): 基本構文まとめ

Objective-C との差分

・文末のセミコロン不要
・NSObject の継承不要
・ヘッダーファイル不要
・ブラケットでなく、ドットシンタックス
・nil の代入ができない
・型の指定が省略可能
・mutable は変数か定数かで表現
・クラスの alloc 不要
・Cocoa とかの場合はインスタンスメソッドの With 以前をカット

コメント

// コメント
/*
複数行コメント
*/

変数

var name:String = "Swift"
var x:Double, y:Double
x = 0.0

定数

let name:String = "Swift"

演算

 x + y
x - y
x * y
x / y
x % y // x を y で割った余り
x++   // x = x + 1
y--   // y = y - 1

評価

a == b  // a と b が同じ
a != b  // a と b は違う
a > b   // a は b より大きい
a < b   // a は b より小さい
a >= b  // a は b 以上
a <= b  // a は b 以下

if 比較

if (評価1) {
    // 評価1がtrueの場合
} else if (評価2) {
    // 評価1がfalseで評価2がtrueの場合
} else {
    // 評価1、評価2どちらもfalseの場合
}

三項演算子

var result = 評価 ? 1 : 2 // 評価がtrueの場合は1、そうでなければfalse

論理

!a      // a ではない否定
a && b  // a かつ b
a || b  // a または b

Switch 比較

var age = 20;
switch(age) {
case 20:
    // age が 20 のとき
    break;
case 21...25:
    // age が 21から25 のとき
    break;
case 18,19:
    // age が 18または19 のとき
    break;
default:
    // 上記以外のとき
    println("unko");
}

タプル

let position = (0,10)
switch(position) {
case (0,0):
    break;
case (0,_):
    // _ はどの値でもOK
    break;
case (let x,0):
    // x への代入、どの値でも OK
    break;
case (let a, let b) where a == b:
    // 値が同じとき (where によるオプション条件)
    break;
case (-10..10,-10..10):
    //-10と10以内の値
    break;
default:
    println("unko");
}

forループ

for (初期値; 比較; インクリメント) {
}

for in 配列

for (変数 in 配列) {
}

for in 辞書

for (key, value) in 辞書 {
    println("\(key) - \(value)")
}

whileループ

while (比較) {
    // 比較が true のときループ
}

do {
    // 一回とりあえず実行してループ
} while (比較)

関数

func sum(a:Int, b:Int) -> Int {
    return a + b;
}

// 返り値がタプル タプルの中は別の型でも可
func getCoupleName() -> (String, String) {
    return ("tom", "jerry")
}
var (person1, person2) = getCoupleName();

// 引数が可変長
func trace(args: NSObject...) {
    for arg in args {
        println(arg.description)
    }
}
trace("unko", "unko", "unko", 1, 2, 3.0, -1);

クラス

class Color {
    var r:Double = 0.0, g:Double = 0.0, b:Double = 0.0
    
    // イニシャライザ
    init(r: Double, g:Double, b:Double) {
        self.r = r;
        self.g = g;
        self.b = b;
    }
}
let redColor = Color(r: 1, g:0, b:0);