강의 - www.fastcampus.co.kr/dev_online_iosapp
깃허브 - github.com/FreeDeveloper97/iOS-Study-FastCompus
06. 스위프트 Collection
" closure "
" closure "
Closures are self-contained blocks of functionality that can be passed around and used in your code.
즉 first class type 이며 이름이 없는 메소드 개념이다
링크 - docs.swift.org/swift-book/LanguageGuide/Closures.html
※ first class type ※
1. 변수에 할당할 수 있다
2. 인자로 받을 수 있다
3. 리턴할 수 있다
※ closure의 사용 목적 ※
1. completion block : 비동기에서 앞선 작업이 종료된 후 작업이 수행될 경우 closure를 사용한다
2. higher order functions : 곡예함수(함수로 인자로 받을 수 있는 함수)를 즉시 생성하여 사용할 때 closure를 사용한다
※ closure의 3가지 타입 ※
1. global 함수 : func
2. nested 함수
3. closure expressions : 일반적인 closure
" closure - 형태 (이름 없이 사용하는 경우) "
" closure - 형태 (이름을 넣어 사용하는 경우) "
" closure - no input, no output 형태 "
// ex1) 초심플 closure
let choSimpleClosure = {}
choSimpleClosure()
// ex2) 코드블록을 구현한 clsure
let choSimpleClosure2 = {
print("Hello, 클로져, 코로나 하이!")
}
choSimpleClosure2()
/* closure : No Input -> No Output */
let voidClosure: () -> Void = {
print("iOS Hello")
}
voidClosure
" closure - inout, no output 형태 "
// ex3) 인풋 파라미터를 받는 closure
let choSimpleClosure3: (String) -> Void = { name in
print("Hello, 클로져, 코로나 하이! 나의 이름은 \(name) 입니다")
}
choSimpleClosure3("Jason")
" closure - input, output 형태 "
이름을 넣어 이용하는 경우
// ex4) 값을 리턴하는 closure
let choSimpleClosure4: (String) -> String = { name in
let message = "iOS 개발 만만세, \(name)님 경제적 자유를 얻으실 거에요!"
return message
}
let result = choSimpleClosure4("Jason")
print(result)
//정석대로 사용하는 방법
var multiplyClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
return a * b
}
//간편하게 사용하는 방법
var subClosure: (Int, Int) -> Int = { a, b in
return a - b
}
//제일 짧은코드
var sumClosure: (Int, Int) -> Int = { $0 + $1 }
클로저를 사용하여 값을 받아오는 경우
let result = multiplyClosure(4, 2)
let result2 = subClosure(4, 2)
let result3 = sumClosure(4, 2)
" closure - closure를 파라미터로 받는 함수 "
// ex5) closure를 파라미터로 받는 함수
func someSimpleFunction(choSimpleClosure: () -> Void) {
print("함수에서 호출이 되었어요")
choSimpleClosure()
}
//함수 실행
someSimpleFunction(choSimpleClosure: {
print("헬로 코로나 from closure")
})
// print("함수에서 호출이 되었어요") 실행 -> print("헬로 코로나 from closure") 실행된다
" closure - closure를 포함한 파라미터를 받는 함수
(trailing closure) "
1. 반환값이 없는 함수의 경우
// ex6) trailing closure
func someSimpleFunction(message: String, choSimpleClosure: () -> Void) {
print("함수에서 호출이 되었어요, 메세지는 \(message)")
choSimpleClosure()
}
// 함수 실행
someSimpleFunction(message: "코로나 극혐", choSimpleClosure: {
print("from closure")
})
someSimpleFunction(message: "코로나 극혐") {
print("from closure")
}
// print("함수에서 호출이 되었어요, 메세지는 \("코로나 극혐")") 실행 ->
// print("from closure") 실행된다
2. 반환값이 있는 함수의 경우
/* closure를 파라미터로 받는 함수 */
func operateTwoNum(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
let result = operation(a, b)
return result
}
3. 반환값이 있는 함수 사용의 경우
operateTwoNum(a: 4, b: 2, operation: multiplyClosure)
operateTwoNum(a: 4, b: 2, operation: sumClosure)
operateTwoNum(a: 4, b: 2) {a, b in
return a / b
}
※ closure - capturing values ※
scope를 벗어난 값이어도 사용이 가능한 개념 (scope 밖의 값을 접근)
/* capturing values */
/* scope를 벗어나더라도 사용이 가능한 개념 */
var count = 0
let incrementer = {
count += 1
}
incrementer()
incrementer()
incrementer()
incrementer()
count
'iOS 개발자 > swift 기초' 카테고리의 다른 글
스위프트 기초7 (class, struct, override, upercast, downcast, init, convenience init) (0) | 2021.02.21 |
---|---|
스위프트 기초6 (structure, method, property, protocol, mutating, extension) (0) | 2021.02.19 |
스위프트 기초4 (collection, array, dictionary, set) (0) | 2021.02.15 |
스위프트 기초3 (function, parameter, overload, optional, binding, coalescing) (0) | 2021.02.13 |
스위프트 기초2 (while, repeat, for, switch) (0) | 2021.02.09 |