2014.08.11 17:00

Swift - Function

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 {
        •     ...
        •     }
        •     ...
        • }


      'Technical Stubs > Apple Swift' 카테고리의 다른 글

      함수 호출 문법에서 missing arguments labels가 나올 때  (0) 2014.09.18
      Swift - Closures  (0) 2014.08.12
      Swift - Function  (0) 2014.08.11
      Swift - Control Flow  (0) 2014.08.11
      Swift - Data Type #Collections  (0) 2014.08.08
      Swift - String  (0) 2014.08.08
      Trackback 0 Comment 0