일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Xcode
- 2차원 객체배열
- PHP
- jQuery
- 옵셔널
- 객체
- 제어문
- CodeIgniter
- AWS
- Java
- Spring
- 상속
- 클래스
- EC2
- guard
- 함수
- 전의 의존성
- 사용법
- 자료불러오기
- Gradle
- programmers
- switch-case
- bootstrap
- SWiFT
- 차이점
- CKEditor4
- class
- DatePicker
- amazon
- pagination
Archives
- Today
- Total
not bad 한 개발
Swift - closure(클로저) 본문
(인덕대학교 컴퓨터소프트웨어학과 iOS프로그래밍기초(21-2학기)한성현 교수님 강의 내용을 변형 및 요약 했습니다.)
https://medium.com/@jgj455/%EC%98%A4%EB%8A%98%EC%9D%98-swift-%EC%83%81%EC%8B%9D-closure-aa401f76b7ce
(위의 내용을 참조했습니다.)
closuer(클로저)
- 사용자의 코드안에서 전달되어 사용할 수 있는 로직을 가진 중괄호“{}”로 구분된 코드의 블럭으로 일급객체의 역할이 가능합니다.
- 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수도 있습니다.
- 참조 타입입니다.
클로저 표현식
- 클로저 표현식은 독립적인 코드 블록입니다.
- 매개변수를 받거나, 값을 반환하도록 만들 수도 있습니다.
trailing closure(후행 클로저)
- 클로저가 함수의 마지막 argument라면 마지막 매개변수 이름을 생략한 후 함수 소괄호 외부에 클로저를 구현합니다.
(클로저 사용 예제 1)
let miner = {(num1 :Int , num2 :Int )->Int in
return (num1 -num2 )
}
//print(miner(num1:20, num2:10))
print (miner (20 ,10 ))
print (type (of :miner ))
// 첫 번째 print는 10이 나옵니다.
// 두 번째 print는 (Int, Int) -> Int이 출력됩니다.
// let miner의 타입은 (Int, Int) -> Int 타입 입니다.
(클로저 사용 예제 2)
let multi = {(num1 :Int , num2 :Int )->Int in
return num1 * num2
}
let Result = multi (20 ,20 )
print (Result )
// 400이 출력됩니다.
(클로저 축약 표현들)
let multi = {(num1 :Int , num2 :Int )->Int in
return num1 * num2
}
let add = {(num1 :Int , num2 :Int )->Int in
return num1 + num2
}
func calculator (num1 :Int , num2 :Int , cal :(Int ,Int )->Int )->Int {
return cal (num1 ,num2 )
}
var result = multi (20 ,30 )
print (result ) //1
result = add(20 ,30 )
print (result ) //2
result = calculator(num1 :20 , num2 :30 ){(var1 :Int , var2 :Int )->Int in
return var1 + var2
}// trailing closure
//이름(cal:)을 생략한경우 함수 소괄호 외부에 클로저를 구현합니다.
print (result )//3
result = calculator(num1 :20 , num2 :30 , cal :{(var1 :Int , var2 :Int )in
return var1 + var2
})//리턴형을 생략합니다.
print (result )//4
result = calculator(num1 :20 , num2 :30 ){(var1 :Int , var2 :Int )in
return var1 + var2
}// trailing closure, 리턴형을 생략합니다.
print (result )//5
result = calculator(num1 :20 , num2 :30 , cal :{
return $0 + $1
})//매개변수 생략하고 단축인자(shorthand argument name)사용
print (result )//6
result = calculator(num1 :10 , num2 :20 ){
return $0 + $1
}//trailing closure, 매개변수 생략하고 단축인자사용
print (result )//7
result = calculator(num1 :10 , num2 :20 , cal :{
$0 + $1
})//클로저에 리턴값이 있으면 마지막줄을 자동으로 리턴하기 때문에 return을 생략합니다.
print (result )//8
result = calculator(num1 :10 , num2 :20 ){
$0 + $1
}
print (result )//9
//1 번째 print결과 : 600
//2 번째 print결과 : 50
//3 번째 print결과 : 50
//4 번째 print결과 : 50
//5 번째 print결과 : 50
//6 번째 print결과 : 50
//7 번째 print결과 : 30
//8 번째 print결과 : 30
//9 번째 print결과 : 30
'Swift' 카테고리의 다른 글
Swift - 인스턴스 초기화하기 (0) | 2021.10.23 |
---|---|
Swift - class(클래스) (0) | 2021.10.23 |
Swift - first class object(1급 객체) (0) | 2021.10.09 |
Swift - func(함수) variadic parameter(가변 매개변수) (0) | 2021.10.09 |
Swift - func(함수) 여러 개의 결과 반환 (0) | 2021.10.09 |
Comments