ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift - Function Types
    swift 2021. 1. 5. 16:56

    Function Types

     

    파라미터, 리턴형이 없는 함수

     

    파라미터가 없는 함수

    // 파라미터가 있는 함수
    func printHello(with name: String) {
        print("Hello, \(name)")
    }
    
    let f2: (String) -> () = printHello(with:)
    
    let f3 = printHello(with: )
    
    // 함수를 호출할때는 반드시 아규먼트 레이블을 호출해야 한다고 공부했지만
    // 상수에 저장된 함수를 호출할때는 아규먼트 레이블을 호출하지 않는다.
    f3("World")
    

     

     

    파라미터 있는 함수

    // 파라미터가 있는 함수
    func printHello(with name: String) {
        print("Hello, \(name)")
    }
    
    let f2: (String) -> () = printHello(with:)
    
    let f3 = printHello(with: )
    
    // 함수를 호출할때는 반드시 아규먼트 레이블을 호출해야 한다고 공부했지만
    // 상수에 저장된 함수를 호출할때는 아규먼트 레이블을 호출하지 않는다.
    f3("World")
    
    
    func add(a: Int, b: Int) -> Int {
        return a + b
    }
    
    var f4: (Int, Int) -> Int = add(a:b:)
    f4(1, 2)
    
    var f5 = add(a:b:)
    f5(1,2)
    
    func swapNumbers(_ a: inout Int, _ b: inout Int) {
        
    }
    
    let f6 = swapNumbers(_:_:)
    f6
    

     

    가변 파라미터 함수

    // 가변 파라미터
    func sum(of numbers: Int...) {
        
    }
    
    let f7 = sum(of:)
    f7
    
    

     

    //예제
    
    func add(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
    
    func subtract(_ a: Int, _ b: Int) -> Int {
        return a - b
    }
    
    func multiply(_ a: Int, _ b: Int) -> Int {
        return a * b
    }
    
    func divide(_ a: Int, _ b: Int) -> Int {
        return a / b
    }
    
    // 첫번째 리턴 화살표 selectFunction의 리턴 타입
    // 두번째 리턴 화살표 (형식에 포함된 리턴 화살표)
    //func selectFunction(from op: String) -> (Int, Int) -> Int {
    //
    //}
    
    // 이렇게되면 (Int, Int)는 return에 들어가는 파라미터?
    // 그래서 실행되는 결과가 Int타입으로 return된다는 건가?
    typealias ArithmeticFunction = (Int, Int) -> Int
    
    func selectFunction(from op: String) -> ArithmeticFunction?{
        switch op {
        case "+":
            return add(_:_:)
        case "*":
            return multiply(_:_:)
        case "_":
            return subtract(_:_:)
        case "/":
            return divide(_:_:)
        default:
            return nil
        }
    }
    
    let af = selectFunction(from: "+")
    
    // 함수가 Optional 형식에 저장되어 있기 때문에
    // Optional chaining이 필요
    // 함수자체가 Optional 형식에 저장되어 있기 때문에 괄호 앞에 추가해야 한다.
    af?(1, 2)
    
    // 이런식으로 호출도 가능
    // 왜냐? 상수에 Optional 형식의 함수가 저장된게 아니고
    // Optional chaining으로 부르는거기 때문에 괄호 뒤에
    selectFunction(from: "*")?(12, 34)
    

    'swift' 카테고리의 다른 글

    swift - Closure  (0) 2021.01.05
    swift - Nested Functions  (0) 2021.01.05
    swift - Function Notation  (0) 2021.01.05
    swift - Functions  (0) 2021.01.04
    swift - Optional Pattern  (0) 2021.01.04

    댓글

Designed by Tistory.