ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [5주차] Swift 문법 4(일급시민 클로저 기초)
    iOS프로그래밍기초 2024. 10. 9. 16:05

    1. first class object   or    first class citizen

     

     

    스위프트에서 함수는 first class object 이다.

    - 변수에 함수 자체를 담을 수 있다.

    - 함수 파라미터로 넣을 수 있다.

    - 함수 리턴으로 함수가 나올 수 있다.

     

     

    예제)

    func up(num: Int) -> Int {
        return num + 1
    }
    func down(num: Int) -> Int {
        return num - 1
    }
    
    
    let toUp = up
    print(up(num:10))
    print(toUp(10))
    let toDown = down
    
    
    func upDown(Fun: (Int) -> Int, value: Int) {
        let result = Fun(value)
        print("결과 = \(result)")
    }
    
    upDown(Fun:toUp, value: 10) //toUp(10)
    upDown(Fun:toDown, value: 10) //toDown(10)
    
    func decideFun(x: Bool) -> (Int) -> Int {
        //매개변수형 리턴형이 함수형
        if x {
            return toUp
        } else {
            return toDown
        }
    }
    
    
    let r = decideFun(x:true) // let r = toUp
    print(type(of:r)) //(Int) -> Int
    print(r(10)) // toUp(10)

     

     

     

    1)

    func up(num: Int) -> Int {
        return num + 1
    }
    func down(num: Int) -> Int {
        return num - 1
    }
    
    
    let toUp = up
    
    print(up(num:10))
    print(toUp(10))
    
    let toDown = down

    -함수를 변수에 넣어서 사용할 수 있다.

    -변수에 함수를 담아서 다시 호출 할때는 아규먼트 레이블을 넣지 않아도 된다.

     

     

     

    2)

    func upDown(Fun: (Int) -> Int, value: Int) {
        let result = Fun(value)
        print("결과 = \(result)")
    }
    
    upDown(Fun:toUp, value: 10) //toUp(10)
    upDown(Fun:toDown, value: 10) //toDown(10)

     

    - 함수의 매개변수로 함수를 받을 수 있다.

    - 매개변수 선언 부분을 이런식으로 작성

     

     

    3)

    func decideFun(x: Bool) -> (Int) -> Int {
        //매개변수형 리턴형이 함수형
        if x {
            return toUp
        } else {
            return toDown
        }
    }
    
    
    let r = decideFun(x:true) // let r = toUp
    print(type(of:r)) //(Int) -> Int
    print(r(10)) // toUp(10)

     

    - 리턴으로 함수자체를 리턴할 수 있다.

     

    - decideFun 함수는 

    1)  매개변수로      x: Bool      ,  bool 타입의 변수x  를 받고

    2) 리턴으로    (Int)->Int       , int타입을 매개변수로 받고 int타입을 리턴하는 함수타입을    리턴형으로 가진다.

     

     

     

     

    2. 클로저(Closure)

     

     

    자바스크립트의 화살표 함수, 자바의 람다함수 같이

    이름없는 함수 블록을 변수에 넣어서 사용하는것

     

     

    func add(x: Int, y: Int) -> Int {
        return(x+y)
    }
    print(add(x:10, y:20))
    
    
    let add1 = { (x: Int, y: Int) -> Int in
        return(x+y)
    }
    
    print(add1(x:10, y:20)) //주의 error: extraneous(관련 없는) argument labels 'x:y:' in call
    print(add1(10, 20)) //OK
    print(type(of:add1)) //과제. (Int , Int) -> Int
Designed by Tistory.