inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

활용-8 앱 / 저장속성과 didSet을 사용하는 패턴 (활용 앱66강)

활용-8 앱 / 저장속성과 didSet을 사용하는 패턴 (활용 앱66강)

241

권석기

작성한 질문수 3

0

   var member: Member? {
        didSet {
            guard var member = member else {return}
            mainImageView.image = member.memberImage
            memberNameLabel.text = member.name
            addressLabel.text = member.address
        }
    }

안녕하세요 앨런님
해당 강의에서 didset 부분의 언래핑하는 부분에서

guard let 으로 하지 못하는 이유를 알고싶습니다
let 이여도 내부의 프로퍼티가 var 라면 읽을 수 있는것이 아닌지요?

lazy로 선언되어서 그런것 같은데
문법부분을 제가 잘 모르는것 같습니다
이러한 부분은 문법파트중에 어느부분을 봐야 해소가 될까요?

ios swift

답변 1

0

앨런(Allen)

네 안녕하세요 석기 님.

두가지 이유가 있는데,

(1) 해당 Member타입이 구조체로 구현되어 있어서 그렇습니다.
구조체는 값타입이기 때문에 함수에서 파라미터로 사용하거나.. 등등 모든 상황에서 (내부 속성값만) 복사되어서 전달됩니다.
여기서 guard let member = member 하시면..
여기서도 마찬가지로 오른쪽에 있는 것은 self.member 이고 왼쪽에 let member에 할당하고 있습니다. (오른쪽의 타입의 내부 속성 값들을 복사해서 왼쪽에 할당하게 됩니다.)
그런데 이 때, 구조체의 경우 let으로 할당하시면, 내부 속성들도 다 var로 선언했다고 하더라도 값이 let (상수화) 됩니다.
(플레이그라운드에서 실험해 보시면, 구조체로 어떤 걸 만들고 상수(let)에 넣으시면 내부 속성들이 아무리 var로 선언했다고 하더라도 값의 변화가 안되게 됩니다.)
구조체는 값 타입이기 때문에 상수에 넣으면 내부 속성들도 다 상수처럼 인식이 되는 것이죠.


그리고 두번째 이유는
(2) 이 구조체 속성 중에 lazy var로 구현된 속성(멤버이미지)이 있다보니... 여기서는 상수(let)에 담을 수가 없어서 안되는 것입니다. (lazy는 무조건 var이고, let은 안됩니다.)

일반적인 경우엔 대부분 될 것이고.. 이 프로젝트의 경우에만, 저장된 이미지를.. 이름으로 가져오는 트릭으로 제가 구현해서 단순하게 안된다고 보셔도 됩니다. 일반적인 경우엔 이미지도 서버에서 가져오거나 등등 할테니.. lazy var로 선언되는 속성이 특별하게 없는 경우엔 guard let도 잘 되실껍니다.
(물론 클래스로 선언하면.. 또 참조타입이니, 주소만 복사하기에 guard let도 잘 되긴 하겠죠.)


감사합니다. :)

수강연장부탁드려도될까요..

0

45

2

Drawing Cycle 관련 질문

0

73

1

앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?

0

98

2

델리게이트 패턴 관련 질문

0

69

2

수강 기간 연장 부탁드릴 수 있을까요?

0

67

1

활용 앱 57강 질문입니다.

0

56

1

활용 앱 30강 에러 질문입니다

0

66

2

기초앱 17강 Contraints 설정 질문입니다.

0

68

2

기초 앱 4강 Type Any -> UIButton

0

69

2

34강 유용한 앱 추천에 나오는 UIKitViewer에 대해서 질문이 있습니다

0

81

1

깃에 코드는 올려도 된다고 하셨는데

0

112

1

수강기간 연장신청 드려도 될까요?

0

85

1

수강 기간 연장 부탁드려도 될까요?

0

121

2

수강 기간 연장 신청 요청드립니다.

0

132

2

playground에서 상단 실행?아이콘 회전 관련하여...

0

139

1

활용앱53강에서 질문있습니다.

0

167

2

Project 명칭 변경방법이 궁금합니다.

0

141

1

override 에 대해서 궁금한 것이 있습니다.

0

126

2

섹션8] 코드 리팩토링 문의

0

102

1

xcode 에서 ios 버전 선택 및 시뮬레이터 관련 질문

0

570

2

수강 기간 연장 부탁드려도 될까요?

0

133

2

뷰모델의 상태변화 와 didSet

0

99

1

@Sendable 키워드

0

96

1

클로저

0

109

2