iOS 新言語Swiftを触ってみた(2)

どうもfugetuです。

前回に引き続きSwiftの導入として演算と制御文、配列型辞書型のデータ操作を紹介していきます。

 


■演算

Swiftの演算はJavaやC言語とほぼ違いはありません。

数値演算

四則演算は以下のように行います。

var numInt1:Int = 100 + 50; // 加算 変数numInt1に数値150
var numInt2:Int = 100 - 50; // 減算 変数numInt2に数値50
var numInt3:Int = 100 * 50; // 乗算 変数numInt3に数値5000
var numInt4;Int = 100 / 50; // 割算 変数numInt4に数値2 
var numInt5;Int = 100 % 52; // 余算 変数numInt5に数値2

インクリメント・デクリメントは以下のように行います。

var numInt1:Int = 100; // 数値100
numInt1++;             // インクリメント 数値101
var numInt2:Int = 200; // 数値200
numInt1--;             // デクリメント 数値199

テキスト演算

テキスト演算は以下です。"+"を使用して文字列同士を連結することができます。
Objective-Cはメソッドかまさないといけないので、Swiftでは楽になってます。

var str:String = "パイオネット" + "株式会社";

比較演算

比較演算子は以下です。後ほど紹介するif文で説明します。

// 変数num1とnum2を事前に設定
if num1 == num2 {
    // num1 と num2が等しい場合に処理
}
if num1 > num2 {
    // num1 が num2より大きい場合に処理
}
if num1 >= num2 {
    // num1 が num2が等しい または 大きい場合に処理
}
if num1 < num2 {
    // num1 が num2より小さい場合に処理
}
if num1 <= num2 {
    // num1 が num2が等しい または 小さい場合に処理
}

論理演算

論理演算子もif文で説明します。

// 変数num1とnum2を事前に設定
if (num1 == 100) && (num1 == num2) {
    // AND演算 && 両条件がtrueの場合に処理
}
if (num1 == 100) || (num1 == num2) {
    // OR演算 || 両条件のいずれかがtrueの場合に処理
}
if num1 ^ num2 {
    // XOR演算 ^ 両方の値が等しくない場合に処理
}
if !(num1 == num2) {
    // 否定演算 ! 条件がfalseの場合に処理
}

■制御文

Swiftの制御文もJavaやC言語とほぼ違いはありません。

if文

条件分岐を行うif文は以下のように行います。

// if文
if num1 == num2 {
    // num1 と num2が等しい場合に処理
}
// if - else文
if num1 == num2 {
    // num1 と num2が等しい場合に処理
} else {
    // num1 と num2が等しくない場合に処理
}
// if - else if文
if num1 == num2 {
    // num1 と num2が等しい場合に処理
} else if num1 > num2 {
    // num1 が num2より大きい場合に処理
}

switch文

複数の条件分岐ではswitch文は以下のように行います。
他の言語では見かけない「…」、「....」という書き方ですが、
条件を範囲指定で書けます。

// switch文
switch numInt {
case 0:
    // numIntが0と等しい場合に処理
    break;
case 1,2:
    // 複数指定 numIntが1または2と等しい場合に処理
    break;
case 3...10:
    // 範囲指定 numIntが3〜10の場合に処理
    break;
case 11..<20:
    // 範囲指定 numIntが11〜12の場合に処理
    break;
default:
    // 上記条件以外の処理
    break;
}

for文

繰り返し処理のfor文は基本的な書き方として
「for 変数名 in 配列型などの複数変数」「for 初期化; 条件; 後処理」があります。
前者は配列型などの複数変数を先頭から順に処理する際に、
後者は初期化などの複雑な条件を指定して処理する際に使用します。
それぞれの以下のようになります。

// 「for 変数名 in 配列型などの複数変数」
var ary1:Array<String> = ["Pionet", "Soft", "Fugetu"];
for str in ary1 { // ary1の要素を1つずつstrとして処理
    NSLog(str); // ログ出力、順に"Pionet","Soft","Fugetu"と出力される
}
// 「for 初期化; 条件; 後処理」
for var i = 0; i < 10; i++ { // 変数iを0で初期化、iが10未満では処理を繰り返す、iを1づつインクリメント
    NSLog(str); // ログ出力、順に0〜9が出力される
}

while文

繰り返し処理のwhile文は基本的な書き方として
「while 条件式 {処理}」「do {処理} 条件式」があります。
前者は繰り返し処理前に条件式でチェックを行い、
後者は必ず1度は処理を行ってから条件式でチェックを行います。
それぞれの以下のようになります。

// 「while 条件式 {処理}」
while 10 > numInt++ {
    // 繰り返し処理
    // numIntが10より小さければ処理を実行
  // numIntをインクリメントし、10になるまで処理を繰り返す
}
// 「while 条件式 {処理}」
 do {
    // 繰り返し処理
    // 必ず1度は実行される
    // numIntをインクリメントし、10になるまで処理を繰り返す
} while 10 > numInt++

■配列型・辞書型の操作

前回紹介した配列型データの基本的な操作は以下になります。

配列型


// 宣言
var ary1:Array<String> = ["Pionet", "Soft", "Fugetu"];

// 要素数取得
var numInt1:Int = ary1.count; // 3

// 値の取得
var str1:String = ary1[0]; // "Pionet"
var str2:String = ary1[1]; // "Soft"
var str3:String = ary1[2]; // "Fugetu"

// 値の取得(範囲指定)
var ary2:Array<String> = Array(ary1[1...2]) // ["Soft", "Fugetu"];

// 値の追加
ary1.append("Swift"); // ["Pionet", "Soft", "Fugetu", "Swift"];
ary1 += ["Hello"];    // ["Pionet", "Soft", "Fugetu", "Swift", "Hello"];

// 値の追加(位置指定)
ary1.insert("iPhone", atIndex:1); // ["Pionet", "iPhone", "Soft", "Fugetu", "Swift", "Hello"];

// 値の削除
ary1.removeAtIndex(1); // ["Pionet", "Soft", "Fugetu", "Swift", "Hello"];
ary1.removeLast();     // ["Pionet", "Soft", "Fugetu", "Swift"];

// 値の削除(最後の要素)
ary1.removeLast();     // ["Pionet", "Soft", "Fugetu", "Swift"];

// 値の削除(範囲指定)
ary1[1...2] = []; // ["Pionet", "Swift"];

// 値を全てクリア
ary1.removeAll(); // []

// 値の要素を全て比較
var ary3:Int = [1, 2, 3];
var ary4:Int = [1, 2, 3];
var ary5:Int = [1, 2, 4];
if ary3 == ary4 {
    // ary3 とary4の要素が全て同じなので true
}
if !(ary3 == ary5) {
    // ary3 とary4の要素が異なるので false
}

// 値の順次取出
var ary6:Array<String> = ["Pionet", "Soft", "Fugetu"];
for item in ary6 {
    println(item); // 順にPionet, Soft, Fugetuと出力
}

辞書型データの基本的な操作は以下になります。

辞書型


// 宣言
var dict1:Dictionary<String, String> = ["Pionet":"Soft", "Technic":"Blog"];

// 要素数取得
var numInt1:Int = dict1.count; // 3

// 値の取得
var str1:String = dict1["Pionet"];  // "Soft"
var str2:String = dict1["Technic"]; // "Blog"

// キーの配列取得
var keys:Array<String> = Array(dict1.keys) // ["Pionet", "Technic"];

// 値の配列取得
var values:Array<String> = Array(dict1.values) // ["Soft", "Blog"];

// 値の追加
dict1["Hello"] = "World"; // ["Pionet":"Soft", "Technic":"Blog", "Hello":"World"]
dict1.updateValue("Swift", forkey:"iPhone"); // ["Pionet":"Soft", "Technic":"Blog", "Hello":"World", "iPhone":"Swift"]

// 値の更新
dict1.updateValue("Objective-C", forkey:"iPhone"); // ["Pionet":"Soft", "Technic":"Blog", "Hello":"World", "iPhone":"Swift"]

// 値の削除
dict1.removeValueForKey("Hello"); // ["Pionet":"Soft", "Technic":"Blog", "iPhone":"Swift"]
dict1["iPhone"] = nil;            // ["Pionet":"Soft", "Technic":"Blog"]

// 値を全てクリア
dict1.removeAll(); // []

// 値、キーの順次取出
var dict2:Dictionary<String, String> = ["Pionet":"Soft", "Technic":"Blog"];
for (value, key) in dict2 {
    println(value); // 順にSoft, Blogと出力
    println(key);   // 順にPionet, Technicと出力
}

以上が演算と制御文、配列型辞書型のデータ操作の説明になります。

触れてみて範囲指定による柔軟な書き方ができているのが印象的ですね。
配列や辞書型は値の追加や比較などの簡素に書けるのが好印象です。

次回は関数、クラスなどについて説明したいと思います。

では、また