45
Function & Closure about Swift 창원대학교 정보통신공학과 Mobile-X 김대호 지도교수 : 박동규 2015.1.13

Function & Closure about Swift

Embed Size (px)

Citation preview

Function & Closure about Swift

창원대학교 정보통신공학과 Mobile-X 김대호

지도교수 : 박동규 2015.1.13

목차

• 함수(Function)

• 중첩함수(Nested Function)

• 클로저(Closure)

함수(Function)

• 함수란 하나 이상의 기능이 구현된 집합체

• 프로그래밍을 하면서 없어서는 안되는 중요한 기능

함수(Function)

• 함수의 구성은 함수이름 파라매터 반환값 함수구현 부분으로 구성되어 있다

• Swift에서 함수의 정의는 func 키워드를 사용하여 구현한다

함수(Function)

함수(Function)

함수 이름

함수(Function)

파라매터 이름

함수(Function)

반환 타입

함수(Function)

함수 구현

함수(Function)

반환값 리턴

함수(Function)

• Swift에서 함수는 직관적인 구문으로 함수를 구현 한다.

• Tuple을 이용하여 값을 한꺼번에 값을 return 할 수 있다.

함수(Function)

파라매터 : 2개의 String 반환값 : 1개의 String

함수(Function)

파라매터 : 1개의 String , 1개의 Int 반환값 : None

함수(Function)

파라매터 : None 반환값 : None

함수(Function)파라매터 : 1개의 Int 반환값 : 2개의 Int

Tuple을 이용하여 두개의 값을 한번에 return 시켰다.

함수(Function)

• Variadic 파라미터 : 함수의 파라매터를 제한 없이 계속 사용가능함

• 똑같은 타입의 배열로 만들어진 파라매터를 불러옴

함수(Function)numbers 는 Int 형 타입의 배열(Array)

numbers 의 각각의 요소 값인 number가 sum 변수에 더해짐

중첩 함수(Nested Function)

• Swift는 다른 함수의 내부에 함수 중첩이 가능하다

• 내부의 중첩된 함수는 바깥쪽(중괄호 넘어) 함수에 선언된 변수를 사용할 수 있다.

• 중첩함수의 호출은 함수 내부에서 만 가능하므로 내부적으로 은닉이 가능하다

중첩 함수(Nested Function)함수 FuncA

중첩 함수 FuncB

(Void -> Int)

retrun a

FuncB는외부 FuncA의 값 a을 처리할 수 있다

(Void -> Void)

var a = 10

a = a + 10

10

중첩 함수(Nested Function)

add()함수는 returnAdd()의 값 y을 처리할 수 있다

중첩 함수(Nested Function)함수 FuncA

var c : Float

중첩 함수 FuncB

retrun c + 1

파라매터 Void

retrun FuncB

중첩함수의 실행결과로 그 중첩함수를 반환하는 경우

(Int -> Int)

1개의 FuncB 형태(Int->Int)의 타입 반환

중첩 함수(Nested Function)

makeIncremetner()의 return 값을 엑세스 하는 increment 변수

AddOne()

중첩 함수(Nested Function)함수 FuncA

var c : Float

중첩 함수 FuncB

retrun c + 1

파라매터 Void

retrun FuncB

(Int -> Int)

1개의 FuncB 형태(Int->Int)의 타입 반환

increment

중첩 함수(Nested Function)함수 FuncA

중첩 함수 FuncB

retrun b

파라매터 Int a

retrun FuncB

중첩함수의 실행결과로 그 중첩함수를 반환하는 경우

(void -> Int)

1개의 FuncB 형태(void->Int)의 타입 반환

var b : Float

b += a

makeIncrementor는 반환타입이 ()->Int인 함수

중첩 함수(Nested Function)

또한 amount라는 Int형 파라미터를 가짐 그리고 함수 내부에 runningTotal이라는 Int 변수를 선언

중첩 함수(Nested Function)

incrementor의 경우 인자가 없지만 runntingTotal과 amount변수를 바깥함수에서 참조함 (캡쳐)

중첩 함수(Nested Function)

runningTotal 변수는 호출될때마다 amount만큼 증가 되어지는데

,runningTotal변수를 바깥함수로부터 참조 캡쳐하였기 때문임

중첩 함수(Nested Function)

중첩 함수(Nested Function)

함수 FuncA

함수 FuncB

파라메터 1개의 배열, 1개의 FuncB(Int -> Bool)

retrun Bool(True of false)

함수 FuncC(FuncB를 엑세스 한 파라매터)

(Int->Bool)

Bool값을 반환

(Int->Bool)

retrun Bool(True of false) retrun Bool(True of false)

함수가 파라매터가 되서 함수를 전달하는 경우

중첩 함수(Nested Function)

함수 FuncB

함수 FuncC

함수 FuncA

배열 중에서 10보다 작으면 ture 아니면 false

클로져(Closure)

• 코드 내부에서 전달하고 사용할 수 있는 독립된 기능 블록

클로져(Closure)

• 코드 내부에 일시적으로 생성되어 동작하고 인자가 동적으로 복사 되어 전달된다

• 중첩함수, 무명함수 역시 클로저의 종류 중 일부이다.

클로져(Closure)

파라메터 리턴타입

타입과 상태를 구분 짓는 구문 “in”

상태”

Sorted Closure

• sorted function은 Swift에서 제공하는 배열 정렬 함수

• 배열 파라메터와 함수 파라메터가 필요

• 여기서 함수타입은 배열 파라메터와과 같은 타입의 변수 2개를 파라메터로 가지고 Bool타입을 반환한다

Sorted Closure

여기서 대문자 C는 Collection(배열, 딕셔너리)를 뜻한다

Sorted Closurenames String배열과 배열 요소와 타입이 같은

(String,String) -> Bool의 타입의 함수를 sorted 함수 파라미터로 쓰인다

Sorted Closure

Closure expression syntax : 클로저 표현식

Sorted Closure

sorted Function은 함수에 sorted closure가 인자로 쓰여지기 때문에 swift 는 자동으로 그 함수가 sortclosure 라는 것을 추론 할 수 있기 때문에

(String, String) -> Bool 이라는 표현을 쓸 필요가 없다

Sorted Closure

Sorted Closure

???

shorthand argument name, $0은 첫번째로 들어온 인자 $1은 두번째로 들어온 인자를 뜻하며

이렇게 선언하면 인자를 선언할 필요가 없게 된다

Trailing Closure

• 어떤 함수 마지막 파라매터가 클로저 일때, 그 클로저 표현식이 길다면 호출 할때 괄호 안에 넣는대신 괄호를 닫고 표현 할 수있다.

Trailing Closure

FuntionA(A,B,…,{Closure express})

FuntionA(A,B,…) {Closure express}

Trailing Closure

Thank you

참고 자료

• http://blog.naver.com/seotaji/220129425020

• http://blog.naver.com/sqlpro/220022591074