ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift) 함수 타입
    Swift 2020. 11. 18. 18:35

    swift에서 함수는 1급 객체(First class Citizen)이다.

     

    1급 객체는 3가지 특징을 가지고 있다.

    1. 변수나 상수에 저장할 수 있다.

    2. 파라미터로 전달 가능하다.

    3. 함수에서 리턴할 수 있다.

     

    위의 세가지를 충족시키기 위해선 자료형이 필요하다.

     

    함수 또한 자료형이 존재한다.

    Syntax

    (Parameter Type) -> Return Type

    위의 문법은 함수의 자료형을 나타낸다.

    보통 함수를 선언 할때 리턴 값이 없다면 생략 가능 하지만 함수 타입에선 생략이 불가능 하다.

    기존 언어들에서 사용하는 Void 대신 ()를 통해 없음을 대신 한다.

    func doSomething() {
    	...
    }
    
    () -> ()  // parameter가 없고 return도 없는 함수 타입

    위의 doSomething 함수의 타입은 () -> () 이다.

     

    func printInteger(num: Int) {
        print(num)
    }
    
    func returnInt(_ num: Int) -> Int {
        return num
    }
    
    func add(_ a: Int, with b: Int) -> Int {
    	return a+b
    }
    
    let a: (Int) -> () = printInteger(num:)  // (Int) -> ()
    let b: (Int) -> Int = returnInt(_:)      // (Int) -> Int
    let c: (Int, Int) -> Int = add(_:with:)  // (Int, Int) -> Int
    
    a(5) // 5
    c(1, 3) // 4
    
    ※상수에 저장된 함수를 호출 할 때는 argument label를 호출하지 않는다.

    Int 자료형 두개를 받아 반환 하는 것 등 모든 함수에는 타입이 존재한다.

     

    활용법

     

    func add(_ num1: Int, _ num2: Int) -> Int {
        return num1 + num2
    }
    func subtract(_ num1: Int, _ num2: Int) -> Int {
        return num1 - num2
    }
    func multiply(_ num1: Int, _ num2: Int) -> Int {
        return num1 * num2
    }
    func divide(_ num1: Int, _ num2: Int) -> Int {
        return num1 / num2
    }
    
    
    func chooseCalculationOperator(_ symbol: String) -> ((Int, Int) -> Int)? {
        switch symbol {
        case "+":
            return add(_:_:)
        case "-":
            return subtract(_:_:)
        case "*":
            return multiply(_:_:)
        case "/":
            return divide(_:_:)
        default:
            return nil
        }
    }
    
    chooseCalculationOperator("+")?(3,4)  // 7
    

     

     

    'Swift' 카테고리의 다른 글

    Swift) json 다루기  (0) 2021.06.16
    Swift) API Design Guidelines  (0) 2021.06.10
    Swift) Optional  (0) 2020.11.11
    Swift) swift 5에 추가된 String Interpolation  (0) 2020.11.04
    Swift) Type Inference과 컴파일 시간  (0) 2020.10.21

    댓글

Designed by Tistory.