일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c언어
- 프로그래머스 답
- Python
- 카카오 2020
- 소수
- coco 데이터셋
- 카카오 2021
- ios 개발 시작
- Siwft
- 카카오
- 이미지학습
- swift 시작
- swift 배열
- 카카오 2018
- 데이터셋 만들기
- kakao 2018
- supervisely
- roboflow
- 스위프트
- 파이썬
- 프로그래머스
- 최솟값 만들기
- 날씨 앱
- SwiftUI
- Kakao
- 카카오 2019
- 문제
- fast.ai
- 머신러닝
- swift
Archives
- Today
- Total
잡초의 일지
[Swift] Closure 클로저 본문
728x90
반응형
SMALL
Closure
이름이 없는 메소드. 동적으로 끼워넣을 수 있다는 장점.
클로저가 살아있는 한, 클로저 밖에서도 변수 사용 가능.
Closure 선언
var multiplyClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
return a*b
}
/***********************************************************************************/
var multiplyClosure: (Int, Int) -> Int = { a, b in //파라미터 없애고, 반환하는 값 아니까 없애고, 그러면 소괄호도 필요없다.
return $0 * $1 //첫번째꺼랑 두번째꺼 곱해서 리턴하겠다. --> 이렇게 쓰면 앞에 있는거 없이 아래처럼도 쓸 수 있다.
}
/***********************************************************************************/
var multiplyClosure: (Int, Int) -> Int = { $0 * $1} //이렇게까지 간소화할 수 있다.
이렇게 계산된다.
fucntion이 클로저 받는 경우
func operateTwoNum(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
let result = operation(a, b)
return result
}
Closure 바꾸기
- addClosure라는 새로운 클로져 만들어서 operation 변경 가능
operateTwoNum(a: 4, b: 2, operation: multiplyClosure)
var addClosure: (Int, Int) -> Int = {a, b in
return a + b
}
operateTwoNum(a: 4, b: 2, operation: addClosure)
- 즉흥적으로 operation 변경 가능
operateTwoNum(a: 4, b: 2) { a, b in
return a / b
}
input, output 없는 Closure
let voidClosure: () -> Void = {
print("hello world!")
}
voidClosure()
Capturing Values
var count = 0
let incrementer = { // 클로저
count += 1
}
incrementer()
incrementer()
incrementer()
incrementer()
count //4가 된다.
----------------------------------------------------------------------------------------------------------------------------
연습
import UIKit
/***** Closure 선언 *****/
var addClosure: (Int, Int) -> Int = { (a:Int, b:Int) ->Int in
return a + b
}
var subtractClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
return a - b
}
var addClosure2: (Int, Int) -> Int = { a, b in
return a + b
}
var addClosure3: (Int, Int) -> Int = { $0 + $1 }
/***** function이 Closure 받는 경우 **** */
func calculateFuncion(a:Int, b:Int, operation: (Int, Int)->Int ) -> Int {
let res = operation(a, b)
return res
}
calculateFuncion(a: 2, b: 3, operation: addClosure)
calculateFuncion(a: 5, b: 1, operation: subtractClosure) // 다른 클로저를 넣어서 사용할 수도 있다.
calculateFuncion(a: 4, b: 2) { a, b in // 즉흥적으로 다른 클로저를 만들어서 사용할 수도 있다.
return a*b
}
// input, output 없는 클로저
let voidClosure: () -> Void = {
print("hello world!")
}
voidClosure()
// Capturing Values
var count = 0
let incrementClosur = {
count+=1
}
incrementClosur()
incrementClosur()
incrementClosur()
count
----------------------------------------------------------------------------------------------------------------------------
클로저... 어렵고 중요한것.... 많이 연습해야 되겠다..
728x90
반응형
LIST
'[코딩] 배우는것 > Swift' 카테고리의 다른 글
[Swift] Protocol 프로토콜 (0) | 2020.07.10 |
---|---|
[Swift] Structure 구조체 (0) | 2020.07.10 |
[Swift] Collection : Set (0) | 2020.07.09 |
[Swift] Collection : Dictionary (0) | 2020.07.09 |
[Swift] Collection : Array (0) | 2020.07.09 |
Comments