클로저에서 비탈출 클로저 관련 질문이 있습니다.

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • rrkkee015
      참가자
      • 글작성 : 2
      • 답글작성 : 1
      1,160 포인트

      본 내용은 ‘스위프트 프로그래밍 3판’의  3부 – 함수형 프로그래밍과 스위프트, p266 13-18의 코드 부분의 질문인데요.

      스크린샷 2021-01-04 오후 10.00.33

      위와 같은 코드인데요.

       

      제 생각엔 runNoescapeClosure()로 instance의 메소드를 실행하면 Void 값이 리턴되며, 안에 있는 functionWithNoescapeClousre라는 클로저가 있지만 실행이 안되기 때문에 내부 블록에 있는 x=200이 실행이 안돼서 x=10이 나와야할거 같다는 생각을 해봤는데, 그게 아닌거 같더라고요.

       

      정확하게는 functionWithNoescapeClosure가 어떻게 실행되는지 모르겠습니다.

       

      워낙 생략이 가능하고, 함축된 부분이 많다보니 어디서 놓친건지 잘 모르겠어서 질문드립니다.

       

      PS.  글을 작성하고 고민을 해봤는데, sorted(by:) 메소드에서도 names.sorted{ $0 > $ 1 } 으로 했듯이, 저 위의 코드도 functionWithNoescapeClousure{ x = 100 } 에서 뒤에 블록 부분이 클로져로 넘어가서 실행이 된걸로 봐야하나요??

      • 이 게시글은 rrkkee015에 의해 1 week, 5 days 전에 수정됐습니다.
      • 이 게시글은 rrkkee015에 의해 1 week, 5 days 전에 수정됐습니다.
      0
    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 466
      13,960 포인트
      functionWithNonescapeClosure {
        x = 200
      }
      

      코드는

      functionWithNonescapeClosure(closure: {
        x = 200
      })
      

      와 같은 표현입니다. 후행 클로저 표기법입니다.
      즉, 말씀하신대로, 클로저를 closure 매개변수의 전달인자로 전달하고 functionWithNonescapeClosure 함수를 실행하는 코드입니다. 함수 내부에서 전달받은 클로저를 실행하기 때문에 x = 200 코드를 실행하게 됩니다 🙂

      0
1 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 260-27-00477
통신판매업 신고번호 : 제 2020-충북청주-0663 호
고객센터 : 카카오톡채널 @yagom