Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active May 1, 2016 03:01
Show Gist options
  • Save KentarouKanno/e0127b36bb1a7f19897c to your computer and use it in GitHub Desktop.
Save KentarouKanno/e0127b36bb1a7f19897c to your computer and use it in GitHub Desktop.
for, for - in, for case

for , for - in , for case

★ for

// Swift2.1まで
for var i = 0 ; i < 10 ; i++ {
    print(i)
}

// Swift2.2以降は以下の書き方に変換されます
for i in 0  ..< 10  {
    print(i)
}

★ for - in

for i in 0...9 {
    print(i)
}

for _ in 0...9 {
    // ループ変数を使用しない時は_(アンダースコア)にする
}

for i in 0..<10 {
    print(i)
}

for i in [0,1,2,3,4,5,6,7,8,9] {
    print(i)
}

var numList = [0,1,2,3,4,5,6,7,8,9]
for i in numList {
    print(i)
}

//=> 0 1 2 3 4 5 6 7 8 9

★ for case

class A { var name: String = "KK"}
struct B {}
enum C { case a }
func funcA() { }

let anyArray: [Any] = [A(), B(), C.a, String(), funcA()]


// --- 変換できない例 ---

for case let a in anyArray where a is A {
    print(a)
    // print(a.name) // Error aはAnyなのでnameにアクセスできない
}


for case let a in anyArray {
    if a is A {
        // print(a.name) // Error aはAnyなのでnameにアクセスできない
    }
}

// --- 変換できる例 ---

// ①
for case let a as A in anyArray {
    print(a.name) //=> KK
}

// ②
for case let a in anyArray {
    if let a = a as? A {
        print(a.name) //=> KK
    }
}

// ③
for case let a in anyArray {
    switch a {
    case let a as A: print(a.name) //=> KK
    default: break
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment