연산이 오래 걸리거나, 네트워크를 통해서 결과를 얻거나, 딜레이가 포함되어 있는 내용은 비동기(async) 방식으로 결과는 나중에 생길 때 전달받기로 하고 프로그램의 수행을 멈추지 않는 방식으로 함수를 구현하는 것이 좋습니다.
// 동기
func syncFunc(_ nums: [Int]) -> Int {
sleep(1)
let sum = nums.reduce(0, +)
return sum
}
// 비동기
func asyncFunc(_ nums: [Int], _ result: @escaping (Int) -> Void) {
print("sleep......3")
DispatchQueue.main.async {
sleep(3)
let sum = nums.reduce(0, +)
result(sum) // 결과가 리턴값으로 전달되는 것이 아니라, 전달받은 함수(result)를 호출함으로써 전달됩니다.
}
}
let asf: (Int) -> () = { print($0) }
asyncFunc([1, 7, 2, 5, 14], asf)
print("프로그램의 수행을 멈추지 않음")
// "sleep.....3"
// "프로그램의 수행을 멈추지 않음"
// ...
// 29
댓글