let A: (Int) -> () //Int(정수형)파라미터를 갖고, 반환형이 없음(=Void)
let B: (Double) -> Double //Double(더블형)파라미터를 갖고, Double(더블형) 반환
let C: (String) -> Void //String(문자형)파라미터를 갖고, 반환형이 없음(=Void)
보편적인 함수 형태 vs 클로저의 형태
//함수
func normalFunc(string: String) -> String {
return "func = \(string)"
}
func mathAdd(a: Int, b: Int) -> Int {
let result = a + b
return result
}
//클로저
let _ = {(string: String) -> String in
return "func = \(string)"
}
let _ = {(a: Int, b: Int) -> Int in
let result = a + b
return result
}
//{ ... } => 중괄호 자체를 클로저라고 생각하면 쉽다
//ex)
let A = { ( ) -> ( ) in
print("클로저")
}
print(A) //Function
A() // 클로저
// 예시함수
func functionA(_ name: String) -> String {
return name + "!!!"
}
func functionB(_ name: String) -> String {
return name + "????"
}
//기능1. 함수를 변수에 할당할 수 있다
var A: (String) -> (String) = functionA //*** 함수를 변수에 할당 ***
A("클로저") // 클로저!!!
B = functionB //*** 함수를 변수에 할당 ***
B("클로저") // 클로저????
//클로저 리터럴C
let C = { (par: String) -> String in
return par + "!!!"
}
c("클로저") // 클로저!!!
큐에 들어간 작업이 끝날 때 까지 기다렸다가 다음 작업을 할까 = 동기(Sync)
작업 큐에 보내놓고 바로 다음 작업을 할까? = 비동기(Async)
Sync(동기)
-실행중인 작업이 끝나야 다음 작업을 시작할 수 있음(= 한번에 하나의 작업만 가능)
-결과의 순서가 중요할때 사용
Async(비동기)
-실행중인 작업이 끝나지 않더라도 다음 작업을 시작할 수 있음(= 한번에 여러 작업을 할 수 있음)
-작업이 먼저 실행됐다고 해서 먼저 끝나는것이 아님(= 작업 순서가 보장되지 않음)
-동기 코드가 끝나야 비동기 코드가 실행됨
//시리얼 내용 추가
[SeSAC] 20220809_TIL (TableView + CollectionView) (0) | 2022.08.09 |
---|---|
[SeSAC] 20220808_TIL (API관련 파일 관리하기) (0) | 2022.08.08 |
[SeSAC] 220804_TIL (Serialization, Pagenation) (0) | 2022.08.04 |
[SeSAC] 20220803_TIL (인증키 관리(gitignore), pagenation, 타입 추론의 속도, 소켓 vs HTTP, 일급객체) (1) | 2022.08.03 |
[SeSAC] 220802_TIL (json구조분석, API KEY, REST API) (0) | 2022.08.02 |