반응형









//  안녕하세요~ 에르의 생각발전소입니다 :)

// 이번 시간에 다룰 주제는 switch fallthrough 입니다.

// 언어의 switch구문과 swift switch구문을 비교해보면 가지 차이점을 확인하실수 있습니다.

// switch 구문에는 패턴이 일치하는 case블록을 싱행하는 대신, 그다음 case블록으로 실행 흐름을

// 전달하는 문법이 있습니다.

// 이를 Fall Through 라고 합니다.

// 특히 명시해주지않아도 적용이 되기 때문에 암시적인 Fall Through 부릅니다! (하지만 스위프트에서 지원하지않습니다.)

/* 

 switch 비교 대상 {

 

 case  비교패턴1:

    실행구문

 

 case 비교패턴2:

    실행구문

 

 case 비교패턴3:

  실행구문

 

 default :

 실행구문

 }

 저번에 다뤘던 스위치구문의 문법입니다!

 비교조건은 본인의 마음에 따라 추가시킬 있으며, default 모든 변수의 case 담당합니다.

 

 */

let sampleChar : Character = "a"


switch sampleChar {


case "a":

    

case "A":

        print("글자는 A입니다.")


default :

    print("일치하는 글자가 없습니다.")

}

// 유감이게도 에러가 발생했습니다. 

// 왜냐하면 스위프트의 스위치구문에서 case 블록은 공백이 되어선 안됩니다.

// 더군다나, 암시적인 fallthrough 지원하지도 않기때문에 에러가 발생했네요.

// fallthrough 실행 흐름이 전달된 비교 블록은 패턴 일치 여부에 상관없이 실행 블록을 처리합니다.

// 하지만 스위프트에는 암시적인 fallthrough 대신 명시적인 fallthrough 방법을 채택하였으며, case 블록이 비어 있어선 안됩니다.!

let sampleCharacter : Character = "a"


switch sampleChar {


case "a" :

    fallthrough

    

case"A":

    print("the character is A")


default :

    print("there is no matched character. ")

}


// 결과는 case "A" 되었습니다원래의 결과는 case "a" 되어야맞지만,

// case "a" 실행되어야할 블록을 fallthrough 이용하여, 다음 블록인 case "A" 토스 해준것이죠!



//스위위프트에서 switch 구문은 하나의 ㅇ리치된 비교패턴만 실행하는 특징과 함께, 어떤 경우라도 반드시 하나의 비교패턴은 일치해야한다는 제약이 있습니다.

// 비교 대상이 비교패턴 어느것과도 일치하지 않아 분기문 내의 어떤 블록도 실행되지 못하는 경우에는 switch구문의 fall이라 하는데, 

// 이때 switch구문은 완전한 비교 패턴을 구성하지 못한것으로 간주합니다.



반응형
by 발전소장 에르 :) 2016. 7. 23. 15:01
반응형

안녕하세요~ 에르의 생각발전소입니다!

저번 시간에 다뤄보았던 Dictionary, Set, Array에 이어,

이번에는 코드의 생명. 

연산자 파트에 속하는 구문에 대해서 살~~짝 알아보도록 하겠습니다! :)\











// if = 조건의 따른 분기문임.


//    if condtion {  ...

//    } else {

//       ...

//     }    //

//  위와 같은 구조를 가짐.


// if 조건이 참이면 else 앞의 구문이 실행되고,

// 거짓일 경우 else 뒤의 구문이 실행된다.


// 전편에 사용했던 변수를 이용하여, if문을 만들어보겠습니다.



if intersect.count > 0 {

    print("두개의 팀에 모두 소속돤 학생은 \(schoolTripTeam1) 입니다.")

} else {

    print("두개의 팀에 모두 소속된 학생은 없습니다.")

}


// intersect 학생수가 0보다 많으니 참이므로, else 앞의 구문이 실행됨.


// 위와 같은 조건식으로 if문을 작성하여 구동하실 있습니다.


// for 구문 : 범위 또는 컬렉션의 반복 구문.


/* for ; 반복조건 ; 증가값 {...

    

 } for item in collection { ...

 

 }   

  */


for studentName in schoolTripTeam1 {


    print("\(schoolTripTeam1) 1 소속된 학생이 맞습니다.")


}


// for switch 구문, 다양한 변수의 경우를 집어 넣을 사용.


for (name, scale) in SeminaRooms  {

    // SeminaRomms 스트링값을 name 인트값을 scale 할당받음.

    

    let roomInformation:String

    //새로운 스트링 타입 상수를 만들어 케이스를 가정하나, print 사용해도됨.

    switch scale { // scale 스위치로 사용하겠다~


    case 4:

        // 스케일이 4라면!?

        roomInformation = "\(name) 작은 방이며. \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 5...10:

        //스케일이 5~10까지라면?

        roomInformation = "\(name) 중간 규모의 방이며, \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 11...20:

        // 스케일이 11~20까지라면?

        roomInformation = "\(name) 규모의 방이며, \(scale)명을수용할 있는 규모의 방입니다."

    

    case 21...30:

        //스케일이 21~30까지라면?

        

        roomInformation = "\(name) 별도의 예약이 필요한 방이며, \(scale)명을 수용할 수있는 규모입니다."


    default:

        // 디폴트를 통해서 네가지 이외의 변수가 발생할

        // 해당값을 실행한다! 라고 모든 변수를 충족시켜줘야만 !

        roomInformation = "\(name) 이하의 방은 없습니다."

        

    }

}


for (name, scale) in SeminaRooms  {

    

    let roomInformation:String

   

    switch scale { 

    case 4:

        

        roomInformation = "\(name) 작은 방이며. \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 5...10:

       

        roomInformation = "\(name) 중간 규모의 방이며, \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 11...20:

       

        roomInformation = "\(name) 규모의 방이며, \(scale)명을수용할 있는 규모의 방입니다."

    

    case 21...30:

  

        

        roomInformation = "\(name) 별도의 예약이 필요한 방이며, \(scale)명을 수용할 수있는 규모입니다."

    default:

       

        roomInformation = "\(name) 이하의 방은 없습니다."

        

    }

}


// 주석을 삭제한 코드 전문입니다.!


// 도움 되셨길 바랍니다!



반응형
by 발전소장 에르 :) 2016. 5. 6. 02:10
| 1 |