본문 바로가기

교육/Swift

[swift] 함수 고급

1. 함수 타입

func Add( a : Int, _ b : Int )->Int 와 같은 함수의 타입은

(Int, Int) -> Int 이다.

이 함수타입을 인자로 가질수도 있다.


2. 함수 내부에 함수 선언

함수내부에 함수 선언이 가능하며 외부 함수의 변수를 사용 가능하다.


3. 샘플코드

// 함수 고급

func Add( a : Int, _ b : Int )->Int

{

    print("Add")

    return a+b

}

showType(Add) // (Int,Int) -> Int


var fp1 :(Int,Int)->Int = Add // c 함수 포인터 개념

fp1(1,2) // Add(1,2)


var fp2 = Add

fp2(2,3)


// 함수 타입을 인자로 가지는 함수

//func foo( f : (Int, Int)->Int, _ a : Int , _ b: Int)

//{

//    f(a,b)

//}

//foo(fp1, 1, 2)

typealias FP = (Int,Int)->Int // 미리 지정

func foo( f : FP, _ a : Int , _ b: Int)

{

    f(a,b)

}

foo(fp1, 1, 2)


// nested function

//func out_fun()

//{

//    func Sub( a : Int, _ b : Int )->Int

//    {

//        print("Sub")

//        return a-b

//    }

//    Sub(10,2) // 안에서는 가능

//}

//

////Sub(1,2) // error

//out_fun()


func out_fun(num : Int) -> (Int, Int)->Int

{

    func Sub( a : Int, _ b : Int )->Int

    {

        print("Sub")

        return a-b + num // 외부함수의 변수 사용 가능, Capture variable

    }

    Sub(10,2) // 안에서는 가능

    return Sub

}

var ret6 = out_fun(5)(10,2) // 함수를 리턴하기 때문에 Sub(10,2)의미

print(ret6) // 10-2+5

'교육 > Swift' 카테고리의 다른 글

[swift] enum  (0) 2016.08.05
[swift] 클로저  (0) 2016.08.04
[swift] 제어문  (0) 2016.08.04
[swift] 반복문  (0) 2016.08.04
[swift] dictionary  (0) 2016.08.04