-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feat] #259 - 개인 코스 공유 기능을 추가 하였습니다. #261
The head ref may contain hidden characters: "#259---\uAC1C\uC778\uCF54\uC2A4\uACF5\uC720\uAE30\uB2A5"
Conversation
- 같은 코드들이 반복되어 재사용 가능한 함수를 구현하였습니다. 확장성을 고려하여 앞으로 코스 관련 공유 기능이 생긴다면 아래 "shareCourse" 함수만 사용하면 됩니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
공유 기능 익스텐션으로 빼서 재사용성 무한대로 높여버리는 이명진 만만세요 그냥 ~ 너무 수고하셨습니다 !!!!
func shareCourse( | ||
courseTitle: String, | ||
courseId: Int, | ||
courseImageURL: String, | ||
minimumAppVersion: String, | ||
descriptionText: String? = nil, | ||
parameter: String | ||
) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
익스텐션으로 따로 빼두는게 좋을 것 같다는 생각을 했는데 역시 명진쌤,,,,, 👍🏻
@@ -106,17 +113,26 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { | |||
// to restore the scene back to its current state. | |||
} | |||
|
|||
func handleDynamicLink(_ dynamicLink: DynamicLink?) -> String? { | |||
func handleDynamicLink(_ dynamicLink: DynamicLink?) -> (courseType: CourseType, courseId: Int)? { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
guard let link = URL(string: "\(dynamicLinksDomainURIPrefix)/?\(courseParameter)=\(courseId)")
이 부분에서 courseParameter를 지정해준거에 따라 추출해서 courseType을 결정해주는 것으로 이해했는데 맞을까용 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
맞습니다. 아래와 같은 코드로 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
본인 코스인지 아닌지 처리하는 부분 확인했습니다~
self.courseTitle = courseModel.title | ||
self.naviBar.setTitle(self.courseTitle ?? "Test Code") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
setData 함수 내에서 처리하던 부분을 여기에서 설정하게 된 이유가 있나요 ?! 단순 궁금증입니닷
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 하면 Scene
에서도 타이틀 관리를 할 수 있기 때문입니다~!
setData()
를 통해 데이터를 넣어주면 title까지 모델에서 받아 올 수 있어요!
바꾸기 전에서는 Scene
에서 타이틀을 어떻게 넣어줘야 할지 고민을 했었는데, 이렇게 바꿔줌으로써 해결을 할 수 있었습니다.
enum CourseType { | ||
case publicCourse, privateCourse | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sceneDelegate의 역할이 scene의 라이프 사이클을 관리하는 거라서 이 파일 내부에서 CourseType에 대한 정의를 하는게 저희를 제외한 외부한테는 조금 이해하기 어려울 수 있겠다는 생각이 들엇습니다... 장황하게 말하긴 했지만 위치를 옮기거나(근데 옮길 곳이 없는듯..?) 주석을 다는게 어떨까용?!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주석을 추가 하도록 하겠습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 필요 없는 주석 제거
- 필요한 주석 추가
self.courseTitle = courseModel.title | ||
self.naviBar.setTitle(self.courseTitle ?? "Test Code") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 하면 Scene
에서도 타이틀 관리를 할 수 있기 때문입니다~!
setData()
를 통해 데이터를 넣어주면 title까지 모델에서 받아 올 수 있어요!
바꾸기 전에서는 Scene
에서 타이틀을 어떻게 넣어줘야 할지 고민을 했었는데, 이렇게 바꿔줌으로써 해결을 할 수 있었습니다.
@@ -106,17 +113,26 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { | |||
// to restore the scene back to its current state. | |||
} | |||
|
|||
func handleDynamicLink(_ dynamicLink: DynamicLink?) -> String? { | |||
func handleDynamicLink(_ dynamicLink: DynamicLink?) -> (courseType: CourseType, courseId: Int)? { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
맞습니다. 아래와 같은 코드로 URL Scheme에 해당하는 요소를 빼고 어떤 건지 구별하여 타입을 구분하여 리턴을 하도록 만들었습니다.
item.name == "courseId", item.name == "privateCourseId"
enum CourseType { | ||
case publicCourse, privateCourse | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주석을 추가 하도록 하겠습니다!
- 필요 없는 주석 제거 - 필요한 주석 추가
54fb20c
to
9d3a764
Compare
🌱 작업한 내용
🌱 PR Point
🔥 이제 개인 코스도 타인에게 코스 공유를 할 수 있습니다.
🍀 privateCourse에 공유 기능을 추가 하여 보관함에 있는 코스도 공유할 수 있게 하였습니다.
공유 코스인지, 아닌지 판별하기 위해
CourseType
을 나눠주었습니다.🍀 공유 기능 extension으로 분리 (shareCourse 함수)
문서화하였기 때문에, 추후에 읽고 가져다 사용만 하시면 됩니다.
아래
RunningWaitingVC
구현 부 에서 확인해서 사용하시면 됩니다.🍀 RunningWaitingVC() 에 공유 버튼 로직 추가
📸 스크린샷
📮 관련 이슈