LoginSignup
17
20

More than 5 years have passed since last update.

Swift 各種構文 メモ

Last updated at Posted at 2017-06-05

for文

構文

for カウンタの変数名 in 範囲 {
    繰り返しの処理
}

使用例

//繰り返しの回数指定(1から10まで)
for index in 1...10 {
    print("index:\(index)") 
}

//配列の要素を列挙
var array = ["きつね","たぬき","たまご"]
for content in array {
    print("中身:\(content)")
}

繰り返し指定で最後の位置を含みたくない場合(範囲指定)

..<を利用する

//繰り返しの回数指定(1から9まで)
for index in 1..<10 {
    print("index:\(index)")
}

インデックス番号を使用しない時

_で省略可能

for _ in 1..<10 {
    print("Oh!!")
}

for-in-enumerated

インデックス番号と繰り返し項目の要素の両方を使いたい時に便利

構文

for (インデックスの変数, 項目名) in 繰り返し項目名.enumerated() {
    //繰り返し処理
}

使用例

var muArray = ["せいこ","アララ","きのい"]

for (index, value) in muArray.enumerated() {
    print("\(index):\(value)")
}

if文

var score = 79

if score > 90 {
    print("天才!!")
} else if 80 <= score && score <= 90{
    print("合格!!")
} else {
    print("残念、不合格!!")
}

switch文

switch score {
    case 100:
        print("大天才!!!")
    break
    case 80...99: //80~99
        print("合格")
    break
    default :
        print("残念、不合格!!!")
    break
}

列挙型(enum)

列挙した値の管理に適する。

書式

enum 定義名称: 型名 {
    case 列挙子 = 
    case 列挙子 = 
}

## 使用例

```swift
enum GameState: Int {
    case Playing = 1
    case GameOver = 2
}

var state: GameState = GameState.Playing
print(state) //列挙子(Playing)
print(state.rawValue) //列挙子に対応する値(1)

Switch文とenum値を組み合わせて使用する

enum GameState {
    case Playing = 1
    case GameOver = 2
}

var state = GameState.Playing

//すべてのenum値のcaseを用意しなければならない
switch state {
case .Playing:
    print("ゲーム中")
case .GameOver:
    print("ゲーム終了")
}

while

条件を満たすまでの間ループを繰り返す

var x = 1
while x < 100 {
    x = x * 2
    print("値は:\(x)です!")
}

guard文

変数に適切な値が入っているかどうかを判別する関数

書式

guard let チェック後に利用する変数名 = チェックする変数名 else {
    //変数が適切な値でなかった場合の処理
}

使用例

var fullFuel = 100

func checkFuel(fullFuel: Int?) {
    guard let fuel = fullFuel else {
        print("もう走れません")
        return
    }
    print("まだ走れる!")
}

checkFuel(fullFuel: fullFuel)

値を書き換える構文

filter

配列の中から特定の要素のみを取り出したいときに便利

var numbers = [1,21,522,34,16]

let results = numbers.filter{ (x:Int) -> Bool in
    //100より小さい値のみを取り出す
    if x < 100 {
        return true
    } else {
        return false
    }
}

print("結果:\(results)") //結果:[1, 21, 34, 16]

map

配列の中の特定の値を変更して新たに配列を生成する。

var numbers = [1,21,522,34,16]
let mapResults = numbers.map{ (x:Int) -> Int in
    //100より小さい値を2倍にして返す
    if x < 100 {
        return x * 2
    } else {
        return x
    }
}

print("結果:\(mapResults)") //結果:[2, 42, 522, 68, 32]

reduce

繰り返し項目(配列等)の値を順次処理する。

var numbers = [1,21,522,34,16]

let reduceTotla = numbers.reduce(0){ (total:Int, score:Int) -> Int in
    //配列の中身を値を足し合わせる。初期値は0。
    return total + score
}

print("合計値:\(reduceTotla)")

また、引数に$0$1を利用して簡潔に書くこともできる

var numbers = [1,21,522,34,16]
let total = numbers.reduce(0, {$0 + $1})
print("合計値:\(total)")

sort

繰り返し項目の値の並び替え。昇順や降順など。

var numbers = [1,21,522,34,16]

numbers.sort{ (value1:Int, value2:Int) -> Bool in
    value1 < value2 //昇順にソート
}
print("ソート結果:\(numbers)") //ソート結果:[1, 16, 21, 34, 522]

$0$1を利用した簡潔な書き方

numbers.sort{$0 > $1} //降順
print("ソート結果:\(numbers)") //ソート結果:[522, 34, 21, 16, 1]

for-in-where

繰り返し処理内にて、where句を使用することで特定の値のときは処理を行わないみたいなことが可能。

//インデックス番号が4のときは処理を行わない
for value in 0...10 where value != 4 {
    print("インデックス:\(value)")
}
17
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
20