SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
Swift 3 : Closure
군산대학교 컴퓨터정보통신공학부 컴퓨터정보공학전공
남 광 우
kwnam@kunsan.ac.kr
Swift 3 Tour and Language Guide by Apple
꼼꼼한 재은씨의 Swift 2 프로그래밍
Closure
• Closure 란?
• 코드 안 또는 함수 파라미터로 전달되어 사용될 수있
는 self‐contained 블록 { }
• nested function 또는 anonymous function의 특수한 형태
• Java, Python의 Lamda와 동등
• Closure는 정의되는 context상의 상수와 변수들에 대한 레퍼
런스를 capture하고 저장하고 있음
• Closure의 종류
• Global Functions
• Nested Functions
• Closure Expressions
• Context 의 capture 및 저장이란?
func basic( param : Int ) ‐> (Int) ‐>Int
{
let value = param + 20;
func append( add: Int) ‐> Int {
return value + add; 
}
return append;
}
let  b  =  basic(10) ;
b(20);
b(20) 
append() 함수가 수행되기 위해서는
global function인 basic()의
value 상수까지 보관되어야 함
nested function
global function
함수 basic(10) 호출 후 종료
Closure
Closure Expressions
• Closure Expression의 형태
• 다음의 syntax를 갖는 self‐contained 블록 { }
• Closure의 예 : Hello Closure~
{    (parameters) ‐> returnType in
statements
}
{   () ‐> () in
print( “ Hello Closure~!”);
}
{   () ‐> Void in
print( “ Hello Closure~!”);
}
{   () ‐> Void in
print( “ Hello Closure~!”);
print( “ Hello~”);
}
let  f = {   () ‐> Void in
print( “ Hello Closure~!”);
print( “ Hello~”);
}
f();  // 클로저의 실행
Closure Expressions
• Closure Expression의 실행
{   () ‐> Void in
print( “ Hello Closure~!”);
print( “ Hello~”);
} () 
Way 1
Way 2
Closure Expressions : Sort
• Closure Expression을 이용한 Sort의 예
• Function Parameter를 이용한 구현
• Closure Expression을 이용한 구현
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
func backward(_ s1: String, _ s2: String) ‐> Bool {
return s1 > s2
}
var reversedNames = names.sorted(by: backward)
// reversedNames is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"]
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
reversedNames = names.sorted( by : { (s1: String, s2: String) ‐> Bool in
return s1 > s2
}  )
reversedNames = names.sorted(by: { (s1: String, s2: String) ‐> Bool in return s1 > s2 } )
한줄로 : 
Closure Expressions : Sort
• Closure Expression의 축약
• Original Closure Expression
• 반환 타입의 생략 : return의 값에 의해 infer 가능
• 파라미터 타입의 생략 : names에 의해 infer 가능
• return의 생략 :  한 문장 이므로 retur으로 infer 가능
reversedNames = names.sorted(by: { (s1: String, s2: String) ‐> Bool in return s1 > s2 } )
reversedNames = names.sorted(by: { (s1: String, s2: String) in return s1 > s2 } )
reversedNames = names.sorted(by: { s1, s2  in return s1 > s2 } )
reversedNames = names.sorted(by: { s1, s2  in s1 > s2 } )
Closure Expressions : Sort
• Closure Expression의 축약(continued)
• retur의 생략 :  한 문장 이므로 retur으로 infer 가능
• in의 생략
• Operator Methods :  $0, $1의 생략
• label by 도 생략
reversedNames = names.sorted(by: { $0 >  $1 } )
reversedNames = names.sorted(by: { s1, s2  in s1 > s2 } )
reversedNames = names.sorted(by: >  )
reversedNames = names.sorted( >  )
Closure Expressions : Sort
• 긴 Closure 함수의 외부 표현 방법
func someFunctionThatTakesAClosure(closure: () ‐> Void) {
// function body goes here
}
// Here's how you call this function without using a trailing closure:
someFunctionThatTakesAClosure(closure: {
// closure's body goes here
})
// Here's how you call this function with a trailing closure instead:
someFunctionThatTakesAClosure() {
// trailing closure's body goes here
}
Closure Expressions : Sort
• Trailing Closure : Sort 의 외부 표현
• 외부 표현
• ()의 생략
reversedNames = names.sorted() { $0 > $1 }
reversedNames = names.sorted { $0 > $1 }
Closure Expressions
• Trailing Closure 의 예
• 십진수‐>영어로 읽기
• Array의 Map 메소드 구현
let digitNames = [
0: "Zero", 1: "One", 2: "Two",   3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"
]
let numbers = [16, 58, 510]
let strings = numbers.map {
(number) ‐> String in
var number = number
var output = ""
repeat {
output = digitNames[number % 10]! + output
number /= 10
} while number > 0
return output
}
// strings is inferred to be of type [String]
// its value is ["OneSix", "FiveEight", "FiveOneZero"]
Array의 map, filter, reduce
• Map, Filter, and Reduce
• Swift 표준 배열 라이브러리의 Closure 지원 함수
• Map
func map<U>(transform: (T) ‐> U) ‐> Array<U>
4
3
5
6
7
8
6
10
12
14
map{$0*2}
map{$0*2}
map{$0*2}
map{$0*2}
map{$0*2}
let  arr = [3, 4, 5, 6, 7]
let  doubleArr = arr.map{ $0 * 2 }
Array의 map, filter, reduce
• Map, Filter, and Reduce
• Filter
func filter(includeElement: (T) ‐> Bool) ‐> Array<T>
4
3
5
6
7
4
6
filter{ $0  % 2 == 0 }
filter{ $0  % 2 == 0 }
filter{ $0  % 2 == 0 }
filter{ $0  % 2 == 0 }
filter{ $0  % 2 == 0 }
let  arr = [3, 4, 5, 6, 7]
let  doubleArr = arr.filter{ $0  % 2 == 0 }
x
x
x
Array의 map, filter, reduce
• Map, Filter, and Reduce
• Reduce
func reduce<U>(initial: U, combine: (U, T) ‐> U) ‐> U
4
3
5
6
7
let  arr = [3, 4, 5, 6, 7]
arr.reduce(0) { $0 + $1 }
0
3
7
12
18
25

Weitere ähnliche Inhalte

Was ist angesagt?

C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수Yu Yongwoo
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeYoung-Beom Rhee
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
Character-Aware Neural Language Models
Character-Aware Neural Language ModelsCharacter-Aware Neural Language Models
Character-Aware Neural Language ModelsHoon Heo
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Young-Beom Rhee
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장HolyTak
 

Was ist angesagt? (11)

javascript01
javascript01javascript01
javascript01
 
C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Character-Aware Neural Language Models
Character-Aware Neural Language ModelsCharacter-Aware Neural Language Models
Character-Aware Neural Language Models
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
 
자연어5 | 1차강의
자연어5 | 1차강의자연어5 | 1차강의
자연어5 | 1차강의
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
190701 c# gram
190701 c# gram190701 c# gram
190701 c# gram
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장
 

Andere mochten auch

[공간정보시스템 개론] L07 원격탐사의 개념과 활용
[공간정보시스템 개론] L07 원격탐사의 개념과 활용[공간정보시스템 개론] L07 원격탐사의 개념과 활용
[공간정보시스템 개론] L07 원격탐사의 개념과 활용Kwang Woo NAM
 
[공간정보시스템 개론] L05 우리나라의 수치지도
[공간정보시스템 개론] L05 우리나라의 수치지도[공간정보시스템 개론] L05 우리나라의 수치지도
[공간정보시스템 개론] L05 우리나라의 수치지도Kwang Woo NAM
 
[공간정보시스템 개론] L08 gnss의 개념과 활용
[공간정보시스템 개론] L08 gnss의 개념과 활용[공간정보시스템 개론] L08 gnss의 개념과 활용
[공간정보시스템 개론] L08 gnss의 개념과 활용Kwang Woo NAM
 
[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L06 GIS의 이해[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L06 GIS의 이해Kwang Woo NAM
 
Swift 3 Programming for iOS : subscript init
Swift 3 Programming for iOS : subscript initSwift 3 Programming for iOS : subscript init
Swift 3 Programming for iOS : subscript initKwang Woo NAM
 
Swift 3 Programming for iOS: error handling
Swift 3 Programming for iOS: error handlingSwift 3 Programming for iOS: error handling
Swift 3 Programming for iOS: error handlingKwang Woo NAM
 
Swift 3 Programming for iOS : Enumeration
Swift 3 Programming for iOS : EnumerationSwift 3 Programming for iOS : Enumeration
Swift 3 Programming for iOS : EnumerationKwang Woo NAM
 
Support Vector Machines
Support Vector MachinesSupport Vector Machines
Support Vector MachinesDaegeun Lee
 
Swift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structureSwift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structureKwang Woo NAM
 
[공간정보시스템 개론] L04 항공사진의 이해
[공간정보시스템 개론] L04 항공사진의 이해[공간정보시스템 개론] L04 항공사진의 이해
[공간정보시스템 개론] L04 항공사진의 이해Kwang Woo NAM
 
Swift 3 Programming for iOS: Function
Swift 3 Programming for iOS: FunctionSwift 3 Programming for iOS: Function
Swift 3 Programming for iOS: FunctionKwang Woo NAM
 
Support Vector Machine Tutorial 한국어
Support Vector Machine Tutorial 한국어Support Vector Machine Tutorial 한국어
Support Vector Machine Tutorial 한국어Jungkyu Lee
 
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01Kwang Woo NAM
 
집단지성 프로그래밍 06-의사결정트리-01
집단지성 프로그래밍 06-의사결정트리-01집단지성 프로그래밍 06-의사결정트리-01
집단지성 프로그래밍 06-의사결정트리-01Kwang Woo NAM
 

Andere mochten auch (15)

Hacker News
Hacker NewsHacker News
Hacker News
 
[공간정보시스템 개론] L07 원격탐사의 개념과 활용
[공간정보시스템 개론] L07 원격탐사의 개념과 활용[공간정보시스템 개론] L07 원격탐사의 개념과 활용
[공간정보시스템 개론] L07 원격탐사의 개념과 활용
 
[공간정보시스템 개론] L05 우리나라의 수치지도
[공간정보시스템 개론] L05 우리나라의 수치지도[공간정보시스템 개론] L05 우리나라의 수치지도
[공간정보시스템 개론] L05 우리나라의 수치지도
 
[공간정보시스템 개론] L08 gnss의 개념과 활용
[공간정보시스템 개론] L08 gnss의 개념과 활용[공간정보시스템 개론] L08 gnss의 개념과 활용
[공간정보시스템 개론] L08 gnss의 개념과 활용
 
[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L06 GIS의 이해[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L06 GIS의 이해
 
Swift 3 Programming for iOS : subscript init
Swift 3 Programming for iOS : subscript initSwift 3 Programming for iOS : subscript init
Swift 3 Programming for iOS : subscript init
 
Swift 3 Programming for iOS: error handling
Swift 3 Programming for iOS: error handlingSwift 3 Programming for iOS: error handling
Swift 3 Programming for iOS: error handling
 
Swift 3 Programming for iOS : Enumeration
Swift 3 Programming for iOS : EnumerationSwift 3 Programming for iOS : Enumeration
Swift 3 Programming for iOS : Enumeration
 
Support Vector Machines
Support Vector MachinesSupport Vector Machines
Support Vector Machines
 
Swift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structureSwift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structure
 
[공간정보시스템 개론] L04 항공사진의 이해
[공간정보시스템 개론] L04 항공사진의 이해[공간정보시스템 개론] L04 항공사진의 이해
[공간정보시스템 개론] L04 항공사진의 이해
 
Swift 3 Programming for iOS: Function
Swift 3 Programming for iOS: FunctionSwift 3 Programming for iOS: Function
Swift 3 Programming for iOS: Function
 
Support Vector Machine Tutorial 한국어
Support Vector Machine Tutorial 한국어Support Vector Machine Tutorial 한국어
Support Vector Machine Tutorial 한국어
 
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
 
집단지성 프로그래밍 06-의사결정트리-01
집단지성 프로그래밍 06-의사결정트리-01집단지성 프로그래밍 06-의사결정트리-01
집단지성 프로그래밍 06-의사결정트리-01
 

Ähnlich wie Swift 3 Programming for iOS : Closure

Java jungsuk3 ch14_lambda_stream
Java jungsuk3 ch14_lambda_streamJava jungsuk3 ch14_lambda_stream
Java jungsuk3 ch14_lambda_stream성 남궁
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
MATLAB Programming BASIC @ GIST winter school 2015
MATLAB Programming BASIC @ GIST winter school 2015 MATLAB Programming BASIC @ GIST winter school 2015
MATLAB Programming BASIC @ GIST winter school 2015 Jaewook. Kang
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Park Jonggun
 
Javascript Closure
Javascript ClosureJavascript Closure
Javascript Closure지수 윤
 
함수형사고 3장 양도하라
함수형사고 3장 양도하라함수형사고 3장 양도하라
함수형사고 3장 양도하라Sunggon Song
 
[15]Android Kotlin을 통한 개발 전략
[15]Android Kotlin을 통한 개발 전략[15]Android Kotlin을 통한 개발 전략
[15]Android Kotlin을 통한 개발 전략NAVER Engineering
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
[Swift] Closure
[Swift] Closure[Swift] Closure
[Swift] ClosureBill Kim
 
Functional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalFunctional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalHyunWoo Lee
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js functionYoung-Beom Rhee
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나병걸 윤
 

Ähnlich wie Swift 3 Programming for iOS : Closure (15)

Java jungsuk3 ch14_lambda_stream
Java jungsuk3 ch14_lambda_streamJava jungsuk3 ch14_lambda_stream
Java jungsuk3 ch14_lambda_stream
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
MATLAB Programming BASIC @ GIST winter school 2015
MATLAB Programming BASIC @ GIST winter school 2015 MATLAB Programming BASIC @ GIST winter school 2015
MATLAB Programming BASIC @ GIST winter school 2015
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
 
Javascript Closure
Javascript ClosureJavascript Closure
Javascript Closure
 
함수형사고 3장 양도하라
함수형사고 3장 양도하라함수형사고 3장 양도하라
함수형사고 3장 양도하라
 
[15]Android Kotlin을 통한 개발 전략
[15]Android Kotlin을 통한 개발 전략[15]Android Kotlin을 통한 개발 전략
[15]Android Kotlin을 통한 개발 전략
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
[Swift] Closure
[Swift] Closure[Swift] Closure
[Swift] Closure
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
 
Functional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalFunctional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functional
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나
 

Mehr von Kwang Woo NAM

메타버스시대의_디지털트윈과_지역성v01.pdf
메타버스시대의_디지털트윈과_지역성v01.pdf메타버스시대의_디지털트윈과_지역성v01.pdf
메타버스시대의_디지털트윈과_지역성v01.pdfKwang Woo NAM
 
해양디지털트윈v02.pdf
해양디지털트윈v02.pdf해양디지털트윈v02.pdf
해양디지털트윈v02.pdfKwang Woo NAM
 
Moving objects media data computing(2019)
Moving objects media data computing(2019)Moving objects media data computing(2019)
Moving objects media data computing(2019)Kwang Woo NAM
 
Moving Objects and Spatial Data Computing
Moving Objects and Spatial Data ComputingMoving Objects and Spatial Data Computing
Moving Objects and Spatial Data ComputingKwang Woo NAM
 
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석Kwang Woo NAM
 
[공간정보시스템 개론] L03 지구의형상과좌표체계
[공간정보시스템 개론] L03 지구의형상과좌표체계[공간정보시스템 개론] L03 지구의형상과좌표체계
[공간정보시스템 개론] L03 지구의형상과좌표체계Kwang Woo NAM
 
[공간정보시스템 개론] L02 공간정보와 지리정보
[공간정보시스템 개론] L02 공간정보와 지리정보[공간정보시스템 개론] L02 공간정보와 지리정보
[공간정보시스템 개론] L02 공간정보와 지리정보Kwang Woo NAM
 
[공간정보시스템 개론] L01 공간정보시스템개요
[공간정보시스템 개론] L01 공간정보시스템개요[공간정보시스템 개론] L01 공간정보시스템개요
[공간정보시스템 개론] L01 공간정보시스템개요Kwang Woo NAM
 
[공간정보시스템 개론] L12 공간정보분석
[공간정보시스템 개론] L12 공간정보분석[공간정보시스템 개론] L12 공간정보분석
[공간정보시스템 개론] L12 공간정보분석Kwang Woo NAM
 
[공간정보시스템 개론] L11 공간정보의 구축
[공간정보시스템 개론] L11 공간정보의 구축[공간정보시스템 개론] L11 공간정보의 구축
[공간정보시스템 개론] L11 공간정보의 구축Kwang Woo NAM
 
[공간정보시스템 개론] L10 수치표고모델
[공간정보시스템 개론] L10 수치표고모델[공간정보시스템 개론] L10 수치표고모델
[공간정보시스템 개론] L10 수치표고모델Kwang Woo NAM
 
[공간정보시스템 개론] L09 공간 데이터 모델
[공간정보시스템 개론] L09 공간 데이터 모델[공간정보시스템 개론] L09 공간 데이터 모델
[공간정보시스템 개론] L09 공간 데이터 모델Kwang Woo NAM
 
Swift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : ProtocolSwift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : ProtocolKwang Woo NAM
 
Swift 3 Programming for iOS : extension
Swift 3 Programming for iOS : extensionSwift 3 Programming for iOS : extension
Swift 3 Programming for iOS : extensionKwang Woo NAM
 
Swift 3 Programming for iOS : Collection
Swift 3 Programming for iOS : CollectionSwift 3 Programming for iOS : Collection
Swift 3 Programming for iOS : CollectionKwang Woo NAM
 
Swift 3 Programming for iOS : Control flow
Swift 3 Programming for iOS : Control flowSwift 3 Programming for iOS : Control flow
Swift 3 Programming for iOS : Control flowKwang Woo NAM
 
Swift 3 Programming for iOS : data type
Swift 3 Programming for iOS : data typeSwift 3 Programming for iOS : data type
Swift 3 Programming for iOS : data typeKwang Woo NAM
 
Swift 3 Programming for iOS
Swift 3 Programming for iOSSwift 3 Programming for iOS
Swift 3 Programming for iOSKwang Woo NAM
 
집단지성 프로그래밍 08-가격모델링
집단지성 프로그래밍 08-가격모델링집단지성 프로그래밍 08-가격모델링
집단지성 프로그래밍 08-가격모델링Kwang Woo NAM
 

Mehr von Kwang Woo NAM (19)

메타버스시대의_디지털트윈과_지역성v01.pdf
메타버스시대의_디지털트윈과_지역성v01.pdf메타버스시대의_디지털트윈과_지역성v01.pdf
메타버스시대의_디지털트윈과_지역성v01.pdf
 
해양디지털트윈v02.pdf
해양디지털트윈v02.pdf해양디지털트윈v02.pdf
해양디지털트윈v02.pdf
 
Moving objects media data computing(2019)
Moving objects media data computing(2019)Moving objects media data computing(2019)
Moving objects media data computing(2019)
 
Moving Objects and Spatial Data Computing
Moving Objects and Spatial Data ComputingMoving Objects and Spatial Data Computing
Moving Objects and Spatial Data Computing
 
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
 
[공간정보시스템 개론] L03 지구의형상과좌표체계
[공간정보시스템 개론] L03 지구의형상과좌표체계[공간정보시스템 개론] L03 지구의형상과좌표체계
[공간정보시스템 개론] L03 지구의형상과좌표체계
 
[공간정보시스템 개론] L02 공간정보와 지리정보
[공간정보시스템 개론] L02 공간정보와 지리정보[공간정보시스템 개론] L02 공간정보와 지리정보
[공간정보시스템 개론] L02 공간정보와 지리정보
 
[공간정보시스템 개론] L01 공간정보시스템개요
[공간정보시스템 개론] L01 공간정보시스템개요[공간정보시스템 개론] L01 공간정보시스템개요
[공간정보시스템 개론] L01 공간정보시스템개요
 
[공간정보시스템 개론] L12 공간정보분석
[공간정보시스템 개론] L12 공간정보분석[공간정보시스템 개론] L12 공간정보분석
[공간정보시스템 개론] L12 공간정보분석
 
[공간정보시스템 개론] L11 공간정보의 구축
[공간정보시스템 개론] L11 공간정보의 구축[공간정보시스템 개론] L11 공간정보의 구축
[공간정보시스템 개론] L11 공간정보의 구축
 
[공간정보시스템 개론] L10 수치표고모델
[공간정보시스템 개론] L10 수치표고모델[공간정보시스템 개론] L10 수치표고모델
[공간정보시스템 개론] L10 수치표고모델
 
[공간정보시스템 개론] L09 공간 데이터 모델
[공간정보시스템 개론] L09 공간 데이터 모델[공간정보시스템 개론] L09 공간 데이터 모델
[공간정보시스템 개론] L09 공간 데이터 모델
 
Swift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : ProtocolSwift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : Protocol
 
Swift 3 Programming for iOS : extension
Swift 3 Programming for iOS : extensionSwift 3 Programming for iOS : extension
Swift 3 Programming for iOS : extension
 
Swift 3 Programming for iOS : Collection
Swift 3 Programming for iOS : CollectionSwift 3 Programming for iOS : Collection
Swift 3 Programming for iOS : Collection
 
Swift 3 Programming for iOS : Control flow
Swift 3 Programming for iOS : Control flowSwift 3 Programming for iOS : Control flow
Swift 3 Programming for iOS : Control flow
 
Swift 3 Programming for iOS : data type
Swift 3 Programming for iOS : data typeSwift 3 Programming for iOS : data type
Swift 3 Programming for iOS : data type
 
Swift 3 Programming for iOS
Swift 3 Programming for iOSSwift 3 Programming for iOS
Swift 3 Programming for iOS
 
집단지성 프로그래밍 08-가격모델링
집단지성 프로그래밍 08-가격모델링집단지성 프로그래밍 08-가격모델링
집단지성 프로그래밍 08-가격모델링
 

Swift 3 Programming for iOS : Closure

  • 1. Swift 3 : Closure 군산대학교 컴퓨터정보통신공학부 컴퓨터정보공학전공 남 광 우 kwnam@kunsan.ac.kr Swift 3 Tour and Language Guide by Apple 꼼꼼한 재은씨의 Swift 2 프로그래밍
  • 2. Closure • Closure 란? • 코드 안 또는 함수 파라미터로 전달되어 사용될 수있 는 self‐contained 블록 { } • nested function 또는 anonymous function의 특수한 형태 • Java, Python의 Lamda와 동등 • Closure는 정의되는 context상의 상수와 변수들에 대한 레퍼 런스를 capture하고 저장하고 있음 • Closure의 종류 • Global Functions • Nested Functions • Closure Expressions
  • 3. • Context 의 capture 및 저장이란? func basic( param : Int ) ‐> (Int) ‐>Int { let value = param + 20; func append( add: Int) ‐> Int { return value + add;  } return append; } let  b  =  basic(10) ; b(20); b(20)  append() 함수가 수행되기 위해서는 global function인 basic()의 value 상수까지 보관되어야 함 nested function global function 함수 basic(10) 호출 후 종료 Closure
  • 4. Closure Expressions • Closure Expression의 형태 • 다음의 syntax를 갖는 self‐contained 블록 { } • Closure의 예 : Hello Closure~ {    (parameters) ‐> returnType in statements } {   () ‐> () in print( “ Hello Closure~!”); } {   () ‐> Void in print( “ Hello Closure~!”); }
  • 6. Closure Expressions : Sort • Closure Expression을 이용한 Sort의 예 • Function Parameter를 이용한 구현 • Closure Expression을 이용한 구현 let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"] func backward(_ s1: String, _ s2: String) ‐> Bool { return s1 > s2 } var reversedNames = names.sorted(by: backward) // reversedNames is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"] let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"] reversedNames = names.sorted( by : { (s1: String, s2: String) ‐> Bool in return s1 > s2 }  ) reversedNames = names.sorted(by: { (s1: String, s2: String) ‐> Bool in return s1 > s2 } ) 한줄로 : 
  • 7. Closure Expressions : Sort • Closure Expression의 축약 • Original Closure Expression • 반환 타입의 생략 : return의 값에 의해 infer 가능 • 파라미터 타입의 생략 : names에 의해 infer 가능 • return의 생략 :  한 문장 이므로 retur으로 infer 가능 reversedNames = names.sorted(by: { (s1: String, s2: String) ‐> Bool in return s1 > s2 } ) reversedNames = names.sorted(by: { (s1: String, s2: String) in return s1 > s2 } ) reversedNames = names.sorted(by: { s1, s2  in return s1 > s2 } ) reversedNames = names.sorted(by: { s1, s2  in s1 > s2 } )
  • 8. Closure Expressions : Sort • Closure Expression의 축약(continued) • retur의 생략 :  한 문장 이므로 retur으로 infer 가능 • in의 생략 • Operator Methods :  $0, $1의 생략 • label by 도 생략 reversedNames = names.sorted(by: { $0 >  $1 } ) reversedNames = names.sorted(by: { s1, s2  in s1 > s2 } ) reversedNames = names.sorted(by: >  ) reversedNames = names.sorted( >  )
  • 9. Closure Expressions : Sort • 긴 Closure 함수의 외부 표현 방법 func someFunctionThatTakesAClosure(closure: () ‐> Void) { // function body goes here } // Here's how you call this function without using a trailing closure: someFunctionThatTakesAClosure(closure: { // closure's body goes here }) // Here's how you call this function with a trailing closure instead: someFunctionThatTakesAClosure() { // trailing closure's body goes here }
  • 10. Closure Expressions : Sort • Trailing Closure : Sort 의 외부 표현 • 외부 표현 • ()의 생략 reversedNames = names.sorted() { $0 > $1 } reversedNames = names.sorted { $0 > $1 }
  • 11. Closure Expressions • Trailing Closure 의 예 • 십진수‐>영어로 읽기 • Array의 Map 메소드 구현 let digitNames = [ 0: "Zero", 1: "One", 2: "Two",   3: "Three", 4: "Four", 5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine" ] let numbers = [16, 58, 510] let strings = numbers.map { (number) ‐> String in var number = number var output = "" repeat { output = digitNames[number % 10]! + output number /= 10 } while number > 0 return output } // strings is inferred to be of type [String] // its value is ["OneSix", "FiveEight", "FiveOneZero"]
  • 12. Array의 map, filter, reduce • Map, Filter, and Reduce • Swift 표준 배열 라이브러리의 Closure 지원 함수 • Map func map<U>(transform: (T) ‐> U) ‐> Array<U> 4 3 5 6 7 8 6 10 12 14 map{$0*2} map{$0*2} map{$0*2} map{$0*2} map{$0*2} let  arr = [3, 4, 5, 6, 7] let  doubleArr = arr.map{ $0 * 2 }
  • 13. Array의 map, filter, reduce • Map, Filter, and Reduce • Filter func filter(includeElement: (T) ‐> Bool) ‐> Array<T> 4 3 5 6 7 4 6 filter{ $0  % 2 == 0 } filter{ $0  % 2 == 0 } filter{ $0  % 2 == 0 } filter{ $0  % 2 == 0 } filter{ $0  % 2 == 0 } let  arr = [3, 4, 5, 6, 7] let  doubleArr = arr.filter{ $0  % 2 == 0 } x x x
  • 14. Array의 map, filter, reduce • Map, Filter, and Reduce • Reduce func reduce<U>(initial: U, combine: (U, T) ‐> U) ‐> U 4 3 5 6 7 let  arr = [3, 4, 5, 6, 7] arr.reduce(0) { $0 + $1 } 0 3 7 12 18 25