• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

Todo 앱에서 DateFormatter 사용 관련 질문 드립니다.

21.06.15 00:53 작성 조회수 168

0

Todo 앱에서 DateFormatter 사용 관련 질문 드립니다.

질문이 3개 있습니다.

질문 1.

    private let dateFormatter: DateFormatter = {

        let formatter: DateFormatter = DateFormatter()

        formatter.dateStyle = DateFormatter.Style.medium

        formatter.timeStyle = DateFormatter.Style.short

        return formatter

    }()

에서

= 뒤의 {}() 코드 블록을 어떻게 이해하면 될까요?

강사님 말씀대로 이름 없는 함수인 클로져로 이해해 보려고 해도 아닌 것 같고 

연산 프로퍼티의 게터도 아닌 거 같고…

대략적으로 {}의 코드가 DateFormatter 객체를 생성해서 반환하는 거 같은데 

어떤 스위프트 문법에 의해서 가능한 건지 모르겠습니다.

질문 2.

여러 스위프트 코드를 보면 DateFormatter처럼 클래스 객체를 생성할 때 ClassName() 이런 식으로 생성하는 경우가 있던데

이런 기존 library 객체들의 디폴트 생성자를 찾아보려면 관련 문서는 어떻게 검색할 수 있을까요?

올려주신 학습자료랑 스위프트 개발자 문서를 봐도 이런 내용은 잘 못 찾겠어서 방법을 문의 드립니다.

자바 같은 경우에는 도큐먼트에 디폴트 생성자가 설명되어 있었던 거 같은데 비슷한 도큐먼트를 어떻게 찾는지 궁금합니다.

질문 3.

위 코드를 이해하려고 이것저것 바꿔보다가

    private let dateFormatter: DateFormatter = {

        let formatter: DateFormatter = DateFormatter()

        formatter.dateStyle = DateFormatter.Style.medium

        formatter.timeStyle = DateFormatter.Style.short

        return formatter

    }()

를 아래처럼 바꿔 보았습니다.

private let dateFormatter: DateFormatter = DateFormatter()

        dateFormatter.dateStyle = DateFormatter.Style.medium

        dateFormatter.timeStyle = DateFormatter.Style.short

그랬더니 두번째 줄에서 

Consecutive declarations on a line must be separated by ;

라는 에러가 나더라고요

let을 var로도 고쳐봐도 똑같고…

스위프트의 클래스에서는 프로퍼티(dateFormatter)에 어떤 타입의 객체를 생성 할당 후 그 객체의 프로퍼티(dateFormatter.dateStyle)는 바로 세팅을 못 해주는 건가요?

그럼 강사님이 작성하신 코드처럼 밖에는 작성을 하는 건지 아니면 UITableViewController init() 써야 되는 건지도 궁금합니다.

긴 질문 읽어주셔서 감사합니다.

답변 미리 감사 드립니다.

답변 1

답변을 작성해보세요.

0

안녕하세요.

{ } 로 묶인 코드는 클로저가 맞습니다. 매개변수가 없는 클로저라고 생각하시면 됩니다. 뒤에 ()가 붙은 것은 클로저를 실행한다는 의미이고, 클로저가 실행되면 실행된 결과값, 즉, return 된 값이 dateFormatter 상수에 할당되는 것입니다.

`ClassName()`은 `ClassName.init()`의 축약형입니다(위의 클로저 실행히 사용한 ()과는 다릅니다). 그래서 클래스 정의 문서에 가셔서 init 이라는 항목을 찾아보시면 됩니다. Swift Language Guide에는 initializer라고 소개되어 있습니다.

세 번째 질문에 대해선 클로저 문법을 제대로 익혀보시면 자연스레 해결될 것 같습니다.

또 궁금한 점이 있으면 언제든 질문 남겨주세요 :)

PKH님의 프로필

PKH

질문자

2021.06.16

빠른 답변 감사 드립니다!