[Feat] #259 - 개인 코스 공유 기능을 추가 하였습니다.#261
Hidden character warning
Conversation
- 같은 코드들이 반복되어 재사용 가능한 함수를 구현하였습니다. 확장성을 고려하여 앞으로 코스 관련 공유 기능이 생긴다면 아래 "shareCourse" 함수만 사용하면 됩니다.
513sojin
left a comment
There was a problem hiding this comment.
공유 기능 익스텐션으로 빼서 재사용성 무한대로 높여버리는 이명진 만만세요 그냥 ~ 너무 수고하셨습니다 !!!!
| func shareCourse( | ||
| courseTitle: String, | ||
| courseId: Int, | ||
| courseImageURL: String, | ||
| minimumAppVersion: String, | ||
| descriptionText: String? = nil, | ||
| parameter: String | ||
| ) { |
There was a problem hiding this comment.
익스텐션으로 따로 빼두는게 좋을 것 같다는 생각을 했는데 역시 명진쌤,,,,, 👍🏻
| } | ||
|
|
||
| func handleDynamicLink(_ dynamicLink: DynamicLink?) -> String? { | ||
| func handleDynamicLink(_ dynamicLink: DynamicLink?) -> (courseType: CourseType, courseId: Int)? { |
There was a problem hiding this comment.
guard let link = URL(string: "\(dynamicLinksDomainURIPrefix)/?\(courseParameter)=\(courseId)")
이 부분에서 courseParameter를 지정해준거에 따라 추출해서 courseType을 결정해주는 것으로 이해했는데 맞을까용 ?
There was a problem hiding this comment.
맞습니다. 아래와 같은 코드로 URL Scheme에 해당하는 요소를 빼고 어떤 건지 구별하여 타입을 구분하여 리턴을 하도록 만들었습니다.
item.name == "courseId", item.name == "privateCourseId"
| private func isMyCourse() { | ||
| guard let isMyCourse = courseModel?.isNowUser else { return } | ||
|
|
||
| // 자기 코스가 아니라면 <공유, 더보기 버튼> 히든 처리 | ||
| if !isMyCourse { | ||
| self.shareButton.isHidden = true | ||
| self.moreButton.isHidden = true | ||
| } |
There was a problem hiding this comment.
본인 코스인지 아닌지 처리하는 부분 확인했습니다~
| self.courseTitle = courseModel.title | ||
| self.naviBar.setTitle(self.courseTitle ?? "Test Code") |
There was a problem hiding this comment.
setData 함수 내에서 처리하던 부분을 여기에서 설정하게 된 이유가 있나요 ?! 단순 궁금증입니닷
There was a problem hiding this comment.
이렇게 하면 Scene에서도 타이틀 관리를 할 수 있기 때문입니다~!
setData()를 통해 데이터를 넣어주면 title까지 모델에서 받아 올 수 있어요!
바꾸기 전에서는 Scene에서 타이틀을 어떻게 넣어줘야 할지 고민을 했었는데, 이렇게 바꿔줌으로써 해결을 할 수 있었습니다.
| enum CourseType { | ||
| case publicCourse, privateCourse | ||
| } |
There was a problem hiding this comment.
sceneDelegate의 역할이 scene의 라이프 사이클을 관리하는 거라서 이 파일 내부에서 CourseType에 대한 정의를 하는게 저희를 제외한 외부한테는 조금 이해하기 어려울 수 있겠다는 생각이 들엇습니다... 장황하게 말하긴 했지만 위치를 옮기거나(근데 옮길 곳이 없는듯..?) 주석을 다는게 어떨까용?!
There was a problem hiding this comment.
주석을 추가 하도록 하겠습니다!
thingineeer
left a comment
There was a problem hiding this comment.
- 필요 없는 주석 제거
- 필요한 주석 추가
| self.courseTitle = courseModel.title | ||
| self.naviBar.setTitle(self.courseTitle ?? "Test Code") |
There was a problem hiding this comment.
이렇게 하면 Scene에서도 타이틀 관리를 할 수 있기 때문입니다~!
setData()를 통해 데이터를 넣어주면 title까지 모델에서 받아 올 수 있어요!
바꾸기 전에서는 Scene에서 타이틀을 어떻게 넣어줘야 할지 고민을 했었는데, 이렇게 바꿔줌으로써 해결을 할 수 있었습니다.
| } | ||
|
|
||
| func handleDynamicLink(_ dynamicLink: DynamicLink?) -> String? { | ||
| func handleDynamicLink(_ dynamicLink: DynamicLink?) -> (courseType: CourseType, courseId: Int)? { |
There was a problem hiding this comment.
맞습니다. 아래와 같은 코드로 URL Scheme에 해당하는 요소를 빼고 어떤 건지 구별하여 타입을 구분하여 리턴을 하도록 만들었습니다.
item.name == "courseId", item.name == "privateCourseId"
| enum CourseType { | ||
| case publicCourse, privateCourse | ||
| } |
There was a problem hiding this comment.
주석을 추가 하도록 하겠습니다!
- 필요 없는 주석 제거 - 필요한 주석 추가
54fb20c to
9d3a764
Compare
🌱 작업한 내용
🌱 PR Point
🔥 이제 개인 코스도 타인에게 코스 공유를 할 수 있습니다.
🍀 privateCourse에 공유 기능을 추가 하여 보관함에 있는 코스도 공유할 수 있게 하였습니다.
공유 코스인지, 아닌지 판별하기 위해
CourseType을 나눠주었습니다.🍀 공유 기능 extension으로 분리 (shareCourse 함수)
문서화하였기 때문에, 추후에 읽고 가져다 사용만 하시면 됩니다.
아래
RunningWaitingVC구현 부 에서 확인해서 사용하시면 됩니다.🍀 RunningWaitingVC() 에 공유 버튼 로직 추가
📸 스크린샷
📮 관련 이슈