ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift - Function
    기술 관련/Apple Swift 2014. 8. 11. 17:00
    Defining and Calling Functions
      • 기본적인 함수 정의는 다음과 같다
        • func 함수이름 ( 인자 정보 ) -> 리턴타입
        • 인자 정보는 이름:타입 형태를 따른다
          • func test (param1: String) -> String
      • 정의된 함수의 호출은 다음과 같다
        • test("Hello")

      Function Parameters and Return Values

      • Multiple Input Parameters
        • 인자 정보에 comma 문자 (',')를 이용하여 여러 인자를 입력 받을 수 있다
          • func test (param1: String, param2: Int) -> String
        • 해당 함수에 대한 호출은 다음과 같다
          • test("Hello", 100)
      • Functions Without Parameters
        • 다음과 같이 인자 정보를 기입하지 않는다
          • func test () -> String
      • Functions Without Return Values
        • 다음과 같이 return 정보를 기입하지 않는다
          • func test (param1: String)
      • Functions with Multiple Return Values
        • 리턴 타입 정의에 Tuple 타입으로 정의한다
          • func test (param1: String) -> (ret1: String, ret2: String)
      • Optional Tuple Return Types
        • 리턴 값에 대한 존재 여부가 불확실한 경우 return 타입에 Question 문자 ('?')를 붙여 optional로 정의한다
          • func test (param1: String) -> String?

      Function Parameter Names
        • External Parameter Names
          • Swift 함수는 같이 Objective C에서와 같이 함수 인자 이름을 노출하여 함수 인자에 대한 가독성을 높일 수 있다
            • func test(name s1: String, withFamilyName s2: String) 
          • 외부로 인자 이름을 노출하면 호출할 때 다음과 같이 해당 이름과 함께 호출 해야 한다
            • test(name: "JeongSeok", withFamilyName: "Hong")
        • Shorthand External Parameter Names
          • 외부로 노출되는 인자 이름과 내부에서 사용하는 이름이 동일한 경우 궂이 똑같은 이름을 동일하게 작성 할 필요 없이 내부에는 sharp 문자 ('#')를 앞에 붙여서 정의한다
            • func test(#name: String)
        • Default Parameter Values
          • 함수 정의 시 default 값을 가진 인자는 호출 시 값을 정의하지 않는 경우 default로 정의된 값을 사용할 수 있다
          • 함수 인자 중간에 default 값이 있는 경우 해당 값을 지정하지 않을 수 있으나 함수에 정의된 인자의 순서는 지켜져야 한다
        • External Names for Parameters with Default Value
          • 기본값을 가지는 인자에 대해서는 자동으로 외부 이름으로 노출이 된다
        • Variadic Parameters
          • 가변 함수 인자는 특정 타입에 대해서 0 또는 그 이상을 받아드릴 수 있도록 정의할 수 있다.
          • 특정 타입 정보 이후 three period 문자 ("...")를 두어 해당 인자가 Variadic임을 표시한다
            • Double...
            • Int...
          • 다른 타입의 인자와 함께 사용 할 수도 있으나 혼란을 방지하기 위해 Variad제일 마지막에 놓여야 정상적으로 인식된다
        • Constant and Variable Parameters
          • 함수에 사용되는 인자는 기본으로 상수로 선언되므로 해당 값을 변경 시 컴파일 오류를 발생한다
          • 그러나 새로운 변수를 할당하지 않고 변수로 사용하는게 편리할 때가 있으므로 인자 값에 var 키워드를 두는 방법을 이용 할 수 있다
            • func test(var name: String)
        • In-Out Parameters
          • 변수로 활용되는 함수 인자는 실제 복사가 되므로 함수 호출에 사용된 정보와 내부에서 사용하는 정보는 같은 값을 가졌으나 다른 정보라고 볼 수 있다
          • 그러나 C나 JavaScript에서와 같이 필요에 따라서 함수 인자로 넘겨진 정보 자체를 변경해야 더 효율적인 경우가 있다
          • 이를 위해 Swift에서는 inout 키워드를 제공한다. 참고로. inout 키워드로 선언된 인자는 var나 let이 될 수 없다
            • func test(inout name: String)
          • 그리고 input을 인자로 가진 함수는 C 언어와 유사하게 ampersand 문자 ('&')를 인자값에 같이 전달한다
            • func test(&name)

        Function Types

        Swift에서는 모든 함수에도 각각의 함수 타입을 정의 할 수 있다.
        함수 타입은 함수 인자 타입과 리턴 타입으로 구성되어 있다.
        • func test(name: String, age: Int) -> String
        이럴 경우 함수 타입은 다음과 같다
        • (String, Int) -> String
        • Using Function Types
          • 함수 타입은 변수나 상수로 선언하여 사용 할 수 있다
            • var testFunc: (String, Int) -> String = test
          • 함수 호출은 일반 함수와 동일하게 사용한다
            • testFunc("Hello", 100)
        • Function Types as Parameter Types
          • 함수 타입을 다른 함수의 인자 함수 타입으로 지정 할 수도 있다
            • func testWithFunc ( testFunc : (String, Int) -> Int, name: String, num : Int)
        • Function Types as Return Types
          • 함수 타입을 다른 함수의 리턴 타입으로 지정 하여 사용 할 수 있다
            • func testAsReturnFunc ( name: String, num: Int) -> (String, Int)-> Int
        • Nested Function
          • 함수 내부에 새로운 함수하여 global 함수가 아닌 내부 함수로서 사용하는 방식을 제공한다
          • func testAsReturnFunc ( name : String, num: Int ) -> (String, Int) -> Int {
          •     func innerFuncA(name: String, age: Int) -> Int {
          •     ...
          •     }
          •     ...
          • }


        '기술 관련 > Apple Swift' 카테고리의 다른 글

        Swift - Closures  (0) 2014.08.12
        Swift - Control Flow  (0) 2014.08.11
        Swift - Data Type #Collections  (0) 2014.08.08
        Swift - String  (0) 2014.08.08
        Swift - Operators  (0) 2014.08.08

        댓글

      Designed by Tistory.