swiftベース-12-switch

5075 ワード

Swithフォーマット:switch(一致する値が必要)case一致の値:実行する文break;OC:
char rank = 'A';
switch (rank) {
    case 'A':
        NSLog(@" ");
        break;
    case 'B':
        NSLog(@" ");
        break;
    case 'C':
        NSLog(@" ");
        break;
    default:
        NSLog(@"    ");
        break;
}

貫通可能
char rank = 'A';
switch (rank) {
    case 'A':
        NSLog(@" ");
    case 'B':
        NSLog(@" ");
    case 'C':
        NSLog(@" ");
    default:
        NSLog(@"    ");
}

defaultを書かなくてもいいです
char rank = 'A';
switch (rank) {
    case 'A':
        NSLog(@" ");
        break;
    case 'B':
        NSLog(@" ");
        break;
    case 'C':
        NSLog(@" ");
        break;
}

default位置は自由に置けます
char rank = 'E';
switch (rank) {
    default:
        NSLog(@"    ");
    break;
    case 'A': {
        int score = 100;
        NSLog(@" ");
        break;
    }
    case 'B':
        NSLog(@" ");
        break;
    case 'C':
        NSLog(@" ");
        break;
}

caseで変数を定義するにはカッコを大きくする必要があります.そうしないと、役割ドメインが混乱します.
char rank = 'A';
switch (rank) {
    case 'A': {
        int score = 100;
        NSLog(@" ");
        break;
    }
    case 'B':
        NSLog(@" ");
        break;
    case 'C':
        NSLog(@" ");
        break;
}

対象タイプを判断できない
NSNumber *num = @100;
switch (num) {
    case @100:
        NSLog(@" ");
        break;
    default:
        NSLog(@"    ");
        break;
}

swift:swift:オブジェクトタイプを判断でき、OCは整数で貫通できないbreakを書かなくてもよい.
var rank = "A"
switch rank{
    case "A": //   if
        print(" ")
    case "B": //    else if
        print(" ")
    case "C": //    else if
        print("  ")
    default: //    else
        print("    ")
}

突き抜けられないから書けない
//     
var rank1 = "A"
switch rank1{
    case "A": // error : 'case' label in a 'switch' should have at least one executable statement
    case "B":
        print(" ")
    case "C":
        print("  ")
    default:
        print("    ")
}

こう書くしかない
var rank1 = "A"
switch rank1{
    case "A", "B": // notice :   OC     
        print(" ")
    case "C":
        print("  ")
    default:
        print("    ")
}

defaultを書かないわけにはいかない
var rank2 = "A"
switch rank2{
    case "A":
        print(" ")
    case "B":
        print(" ")
    case "C":
        print(" ")
// error : Switch must be exhaustive     , consider add a default clause   
}

default位置は最後のみ
var rank3 = "A"
switch rank3{
    default: // error : Additional 'case' blocks cannot appear after the 'default' block of a 'switch'
        print("    ")
    case "A":
        print(" ")
    case "B":
        print(" ")
    case "C":
        print(" ")
}

caseで変数を定義するにはカッコを大きくしない
var rank4 = "A"
switch rank4{
    case "A":
        var num = 10 //       
        print(" ")
    case "B":
        print(" ")
    case "C":
        print(" ")
    default:
        print("    ")
}

区間とメタグループの一致
var num = 10;
switch (num) {
    case 1...9:
        print("   ")
    case 10...99:
        print("   ") // "   
" default: print(" ") } var point = (10, 15) switch (point) { case (0, 0): print(" ") case (1...10, 10...20): // print(" ") //"
" case (_, 0): // X print(" X X ") default: print("Other") }

値バインド
var point1 = (1, 10)
switch point1 {
    case (var x, 10):       //    point1  X     X
        print("x= \(x)")    // "x= 1
" case (var x, var y): // point1 X Y X Y print("x= \(x) y= \(y)") case var(x, y): print("x= \(x) y= \(y)") default: print("Other") }

条件によるバインド
var point2 = (100, 10)
switch point2{
    //   where                case    
    case var(x, y) where x > y:
        print("x= \(x) y= \(y)") // "x= 100 y= 10
" default: print("Other") }