2014-08-29 4 views
3

저는 현재 CS 193P를 따르고 있습니다. 강의 2에 있습니다. 이전에이 수업을 들으 셨다면, 방금 넘기는 수를 출력하는 라벨을 추가 한 것입니다. original codeUILabel의 텍스트 변경

I는 강사 flipCount 용 세터 내부에서 flipsLabel의 텍스트를 변화주의 :

여기 (강의에서 원래 코드) 뷰와 컨트롤러의 스크린 샷이다. 그러나 touchCardButton 메서드가 호출 될 때마다 flipsLabel 객체에 메시지를 보내는 것이 더 쉽고/더 직관적이라고 생각합니다. 수정 후의 스크린 샷은 다음과 같습니다. after modification

강사가 그런 식으로 그 이유를 설명 할 수 있습니까? 그는 "여기 getters와 setter의 또 다른 장점은 UI를 속성과 동기화하는 것입니다."

답변

3

저는 약 2 년 전에도 CS193P에서 iOS 개발자 경력을 시작했습니다.

위의 KudoCC와 마찬가지로, 사용자의 방법을 사용하여 10 개의 다른 위치에 flipCount을 설정하면 10 개의 다른 장소에서도 self.flipsLabel을 설정해야합니다. 따라서 메소드에는 코드 행이 늘어나고 교수 방법은 코드 행을 적게 사용합니다.

개인적으로 프로그래밍의 예술이라고 생각합니다. 우리는 프로그래밍에서 똑같은 것을 달성하는 다른 방법을 가지고 있습니다. 그러나 프로그래밍에서 사용하는 코드가 적을수록 일반적으로 더 좋은 방법입니다.

3

내용은 flipCount 속성에 따라 달라집니다.

당신은 나중에 하나 개 이상의 장소에서 flipCount의 값을 변경할 수 있으며 강사는 말했다 작업 할 경우, 당신은 self.flipsLabel의 내용을 당신이 flipCount을 변경할 때마다 업데이트 할 필요가 없습니다.

구현 방법과 관련없는 간단한 사용자 사례이지만 복잡한 사용자의 경우 flipCount 값을 100 개로 변경할 수 있으며 직관적 인 방법으로 100을 추가해야합니다 번 [self.flipsLabel setText:[....]], 한 곳에서 추가하는 것을 잊어 버리면 버그가 발생합니다.

+1

나는 여전히 혼란 스럽다. 'self.flipsLabel'에 보낸 메시지는'flipCount'에 대한 getter도 호출합니다. 상관없이, flipCount의 값이 다른 곳에서 바뀌 었다고해도 그것이 나에게 가장 최근의 가치를 줄 것이라는 것을 보장하지 않겠는가? – Heisenberg

+1

실제로 그것은 다른 방향입니다. 여기에서 달성하고자하는 것은 ** flipCount **가 설정 될 때마다 ** flipsLabel **을 설정해야합니다. 그래서 교수는 ** flipCount **에 대한 setter 안에 ** flipsLabel **을 설정하는 메서드를 넣습니다. 따라서 ** flipCount **가 설정되면 ** flipsLabel **이 자동으로 설정됩니다. – Ricky

+1

오, 나는 당신이 말하는 것을 보았습니다, 그것은 꽤 좋은 속임수입니다. 교수님 만이'flipCount' 속성을'flipsLabel'을 사용하도록 제한했습니다. 그러나, 다만 호기심에서, 나는 그것을 합법적 인 방식으로하지 않습니까? 교수님이 처음에 flipCount setter가 호출되기를 기대하신다면 getter를 대신 호출하고 동일한 결과를 얻으시겠습니까? – Heisenberg

2

코드 목적은 다음과 같습니다. flipCount 속성에 새 값을 설정할 때마다 레이블 텍스트도 변경됩니다. 레이블 텍스트를 다시 설정할 필요가 없습니다. 코드가 명확하고 나중에 수정하기 쉽습니다.

관련 문제