네트워크 통신의 예시(문법 172강) 질문 있습니다.
431
14 asked
안녕하세요. 강의 항상 잘 보고 있습니다. 제목 관련 질문이 있는데
// 실제 다운로드 코드
movieManager.fetchMovie(date: "20210201") { (movies) in
if let movies = movies {
// 배열 받아서 빈배열에 넣기
downloadedMovies = movies
dump(downloadedMovies)
print("전체 영화 갯수 확인: \(Movie.movieId)")
} else {
print("영화데이터가 없습니다. 또는 다운로드에 실패했습니다.")
}
}
여기 클로저에서 movieManager.fetchMovie(date: "20210201") { (movies) in 이렇게 되어있는데 movies에 괄호를 빼고 그냥 movies라고 해도 상관 없는건가요?? 왜 이쪽에는 (movies) 이렇게 소괄호가 붙어있는건가요??
답변 부탁드리겠습니다. 감사합니다.
Answer 2
0
안녕하세요. khs50851 님.
해당 내용에 관련하여서는 클로저 사용 관련 문법을 좀 살펴보셔야 할 것 같습니다.
(앱 만들기 관련 내용이라기보다는 Swift문법 관련 내용입니다. 본 수업은 문법 수업이 아니므로, 최대한 간단하게 설명드릴께요. 추가적으로 클로저 사용 관련 문법을 찾아보시기 바랍니다.)
아래처럼 함수를 정의하고 인풋으로 함수를 사용할때
(인풋이 3개인 함수를 정의해보죠. 정수 2개, 함수 1개로 함수를 아래 처럼 정의 할수 있고)
// 함수정의
func addTwoNumberAndCall(a: Int, b: Int, completion: (Int) -> Void) {
let c = a + b
completion(c)
}
실제 위와 같이 정의한 함수를 호출해서 사용한다고 하면
// 함수실행
addTwoNumberAndCall(a: 3, b: 4, completion: (Int) -> Void)마지막 함수형태(Int) -> Void 의 파라미터에 아규먼트를 전달할때 여러가지 형태로 전달이 가능합니다.
위의 함수 실행을.. 실제 아래의 모든 형태로 사용가능합니다.
// (1) 콜백함수를 클로저 형태로 전달 (생략 안하고 사용)
addTwoNumberAndCall(a: 3, b: 4) { (num: Int) -> Void in
print(num)
}
// (2) 아웃풋 생략 가능
addTwoNumberAndCall(a: 3, b: 4) { (num: Int) in
print(num)
}
// (3) 인풋 타입 생략 가능
addTwoNumberAndCall(a: 3, b: 4) { (num) in
print(num)
}
// (4) 인풋 괄호 생략 가능
addTwoNumberAndCall(a: 3, b: 4) { num in
print(num)
}
(Int) -> Void 의 형태 즉, 인풋이 정수이고, 아웃풋이 Void인 형태의 함수(콜백함수)를 전달하면 되는데, 이때 이미 타입이 정해져 있기 때문에... 인풋을 (1)처럼 전체 생략 안하고 사용도 가능하고, (2)처럼 아웃풋 생략도 가능합니다. 또, 어짜피 인풋이 Int로 정해져 있기 때문에 (3)처럼 타입을 생략하는 것도 가능하고 (괄호사용), (4)처럼.. 어짜피 파라미터(num)를 지칭하는 것이기 때문에 괄호를 생략하는 것도 가능합니다.
위처럼, (1), (2), (3), (4) 모든 형태로도 사용이 가능합니다. 어찌되었든, (1)의 형태가 아무것도 생략을 안한.. 원본 그대로 형태의 함수라고 보시면 됩니다. (클로저는 결국 함수죠?)
그래서 위처럼 여러가지 형태로 사용할 수 있는 것이 클로저 문법에서의 약속들입니다. 그러니까, 결론적으로 movies에서도 완전히 동일하게
(1) (movies: [Movie]) -> Void
(2) (movies: [Movie])
(3) (movies)
(4) movies
의 모든 형태가 가능한 것입니다.
감사합니다. :)
수강연장부탁드려도될까요..
0
42
2
Drawing Cycle 관련 질문
0
72
1
앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?
0
95
2
델리게이트 패턴 관련 질문
0
66
2
수강 기간 연장 부탁드릴 수 있을까요?
0
61
1
활용 앱 57강 질문입니다.
0
55
1
활용 앱 30강 에러 질문입니다
0
64
2
기초앱 17강 Contraints 설정 질문입니다.
0
67
2
기초 앱 4강 Type Any -> UIButton
0
66
2
34강 유용한 앱 추천에 나오는 UIKitViewer에 대해서 질문이 있습니다
0
78
1
깃에 코드는 올려도 된다고 하셨는데
0
109
1
수강기간 연장신청 드려도 될까요?
0
82
1
수강 기간 연장 부탁드려도 될까요?
0
120
2
수강 기간 연장 신청 요청드립니다.
0
131
2
playground에서 상단 실행?아이콘 회전 관련하여...
0
136
1
활용앱53강에서 질문있습니다.
0
164
2
Project 명칭 변경방법이 궁금합니다.
0
140
1
override 에 대해서 궁금한 것이 있습니다.
0
124
2
섹션8] 코드 리팩토링 문의
0
99
1
xcode 에서 ios 버전 선택 및 시뮬레이터 관련 질문
0
565
2
수강 기간 연장 부탁드려도 될까요?
0
130
2
뷰모델의 상태변화 와 didSet
0
98
1
@Sendable 키워드
0
94
1
클로저
0
105
2

