-
Swift - Function기술 관련/Apple Swift 2014. 8. 11. 17:00Defining 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 TypesSwift에서는 모든 함수에도 각각의 함수 타입을 정의 할 수 있다.함수 타입은 함수 인자 타입과 리턴 타입으로 구성되어 있다.- 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