* 스위프트 함수 선언 및 호출


 다른 언어와 별 다른 차이점이 없기 때문에 자세한 설명은 생략















* 디폴트 함수 매개변수 정의


  buildMessage함수를 수정하여 이름매개변수가 인자로 전달되지 않을 경우 디폴트로 Customer라는 문자열이 사용되도록 변경


















* 함수로부터 여러 개의 결과 반환하기


 함수는 여러 결과 값들을 튜플로 감싸서 반환할 수 있다. 이 함수의 반환 타입은 Float 타입으로 yards, centimeters, meters라는

 이름의 세 개 값을 포함하는 튜플을 반환하는 것을 가르킨다.













* 함수 매개변수의 변수 개수


 가변매개변수(variadic parameter)를 사용하여 매개변수는 함수가 지정된 데이터 타입으로 0개 또는 그 이상의 매개변수를 

 받는다는 것을 가리키기 위해서 세 개의 점(...)을 이용하여 선언된다.


 





WRITTEN BY
whitewave
WhiteWave의 Blog

,

* where문 사용하기


  where문은 witch case에 부가적인 조건을 추가하기 위하여 사용 될 수 있다.













 * fallthrough


  다른 언어의 switch 문에 익숙한 독자라면 각 case문 다음에 break문을 포함할 필요가 없다는 것에 주목해야 한다.

 swift는 일치하는 case 문을 만나면 자동으로 빠져나온다. fallthrough효과는 fallthrough문을 이용하여 구현할 수 있다















 스위프트 switch구문에서는 보통 break문이 사용되지 않지만 default case에서 해야할 작업이 없을 경우에 유용함


WRITTEN BY
whitewave
WhiteWave의 Blog

,

* 스위프트 옵셔널 타입(optional type)


 스위프트 옵셔널 데이터 타입은 기존의 다른 프로그래밍 언어네는 없는 새로운 개념.

 목적 : 변수 또는 상수에 아무런 타입의 값이 할당되지 않는 사황을 처리하기 위해 안전하고 일관된 방법 제공


 옵셔널하게 변수를 선언하기 위해서는 타입 선언부 뒤에 " ? " 문자를 두면 된다.


 index 변수는 이제 정수 값을 갖거나 아무 값도 갖지 않을 수 있다. 이면에서는 옵셔널 변수에 값이 할당되지 않아 컴파일러

 와 런타임에 문제가 되므로 변수는 실제로 nil의 값을 갖는다.

 

 옵셔널은 다음과 같은 방법으로 변수에 할당된 값이 있는지를 식별한다.

 


 





 만약 옵셔널이 할당된 값을 갖는다면 그 값은 옵셔널에 "래핑되었다(wrapped)"라고 한다. 옵셔널에 해핑된 값은

 강제 언패링(forced unwrapping)이라 불리는 개념을 사용하여 접근된다. 간랸하게 말하자면 옵셔널 데이터 타입에서 값을

 추출한다는 의미이고, 옵셔널 이름 뒤에 느낌표(!)를 두어 실행한다.



 





 



 만약 옵셔널 변수은 index가 값을 가지고 있다면, 배열에서 그 위치에 해당하는 값을 콘솔에 출력해준다. 

 index는 옵셔널 타입이기 때문에 해당 값은 변수 이름 다음에 느낌표를 사용하여 언래핑된다.

 

 index변수가 언래핑되지 않았다면(즉, 위의 코드에서 느낌표를 생략했다면)컴파일러는 다음과 같은 에러를 내놓을 것이다.


  Value of optional type Int? not unwrapped


 강제 언래핑하는 또 다른 방법으로, 옵셔널 바인딩(optional binding)을 이용하여 옵셔널에 할당된 값을 임시 변수 또는 상수에 

 할당할 수 있다.


 




 






 위의 코드는 두 가지 작업을 한다.

 1. 지정된 옵셔널이 값을 가지고 있는지를 확인

 2. 옵셔널이 값을 가지고 있다면 선언된 상수에 그 값을 할당하고 if문 수행

  즉, index가 값을 가지고 있는지 확인 후, 가지고 있다면 myvalue상수에 index의 값을 할당 시키고 if문 수행












 옵셔널이 암묵적인 언래핑(implicitly unwrapped)이 되도록 선언할 수도 있다. 

 이러한 방법으로 옵셔널이 선언된다면 강제 언래핑이나 옵셔널 바인딩을 하지 않아도 값에 접근할 수 있다. 

 암묵적인 언래핑으로 옵셔널을 선언하기 위해서는 느낌표를 사용하면 된다.


 암묵적인 언래핑으로 선언된 index 옵셔널 변수는 위의 print호출에서 배열의 인덱스를 사용할 떄 더이상 언래핑할 필요가 없다


 오직 옵셔널 타입만 아무런 값을 갖지 않거나 nil값을 가질 수 있다.





WRITTEN BY
whitewave
WhiteWave의 Blog

,

 *. 스위프트 튜플


   // 튜플에 저장되는 항목들은 어떠한 타입도 될 수 있으며, 저장된 값들이 모두 동일한 타입이어야 한다는 제약 없음.

   let myTuple = (10, 432.433, "This is a String")


   // myTuple의 2번째 위치에 있는 값을 myString변수에 저장

   var myString = myTuple.2

   println(myString)


   // 상수 myInt, myFloat, myString1선언 후, myTuple의 값을 각각 할당

   let (myInt, myFloat, myString1) = myTuple

   println(myInt)

   println(myFloat)

   println(myString1)


   // 무시하고 싶은 값에 밑줄을 사용하면 그 값은 무시됨. 정수 값과 문자 값을 튜플에서 추출하여 각 변수에 할당

   var(myInt1, _, myString2) = myTuple

   println(myInt1)

   println(myString2)


   // 튜플에 저장된 값에 할당된 이름은 코드에서 각 값을 참조하는데 사용

   let myTuple2 = (count: 10, length: 342.433, message: "this is a String")

   println(myTuple2.message)







WRITTEN BY
whitewave
WhiteWave의 Blog

,

*. 타입 어노테이션과 타입 추론

   var userCount : Int = 10  // Int 타입의 userCount변수 생성


*. 타입 추론

   var signalStrength = 2.2.31  // Int 타입의 변수 생성

   let companyName = "My Company"  // String 타입의 변수 생성





WRITTEN BY
whitewave
WhiteWave의 Blog

,