Skip to content
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] #191 - 위치선택 지도에서 선택 기능 추가 #205

Merged
merged 25 commits into from
Nov 14, 2023

Conversation

513sojin
Copy link
Collaborator

🌱 작업한 내용

  • (tmap) 경도 위도 기반 주소 가져오는 api 연결
    • 처음에 카카오 주소 api 연결했었는데 혹~시라도 나중에 쓰일 수 있을까봐 코드는 삭제해두지 않았습니다
  • 지도에서 선택 | 현재 위치에서 선택 하는 기능 추가

자잘한 수정 사항

  • view에서 tap gesture를 쉽게 사용하기 위해 GesturePublisher, GestureSubscription 추가했습니다 (구글링해서 긁어옴ㅎㅎ)
  • BaseView를 추가했습니다. view 만들 때 상속해서 사용하면 편한데 앞으로 view를 추가로 만들 수 있을 것 같아서 추가했어요

🌱 PR Point

기존의 코스 그리기 화면은 위치 검색 -> 해당 위치에 마커 찍음 -> 코스 그리기 화면 의 순서로 진행되는데
지도에서 선택한 경우 위치 검색 -> 해당 위치에 마커 찍기가 아니라
위에는 마커를 띄워만 두고, 실제로 코스를 그리는 화면에서 마커를 찍게 됩니다

결론 : 지도에서 선택한 경우는 분기처리가 필요했다 !! 입니다.

따라서 크게 두 가지 경우로 나누어 생각했습니다

  1. 현재 위치에서 시작하기에서 진입 | 검색으로 진입
  2. 지도에서 선택하기로 진입

고민했던 부분

enum SelectedType {
    case other
    case map
}

이 코드를 검색 화면에 넣어두고 3개의 파일에서 사용했는데
여러 개의 파일에서 사용하기 때문에 더 상단에 넣어야할 것 같다는 고민을 마주했답니다 ..
결론적으로는 코드 업로드와 관련된 네트워크 파일에 넣으려고 하는데 어떤가요 ?!

  • 현재는 SelectedType case 를 변수를 넘겨주는데 싱글톤 코드로 리팩토링 하겠습니다 ~

📸 스크린샷

구현 내용 스크린샷
검색 화면
지도에서 선택 화면
RPReplay_Final1699878718.2.mov

📮 관련 이슈

xcode 14.3 버전에서 생기는 에러 수정을 위한 코드
@513sojin 513sojin self-assigned this Nov 13, 2023
@513sojin 513sojin changed the title #191 위치선택 [Feat] #191 - 위치선택 지도에서 선택 기능 추가 Nov 13, 2023
Copy link
Collaborator

@thingineeer thingineeer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 많으셨습니다~~ 🔥🔥🔥🔥

CombineCocoa는 처음 보네요
UI 되게 깔끔하게 짜신 거 대박 멋지십니다 👍

중간에 보였던 오타와, 궁금했던 점 위주로 달았고, 고민하셨던 부분에 살짝 이해가 부족하여 추가 질문 남겼습니다.

얼른 코드 리뷰 반영하고, 머지 돼서 직접 코드 돌려서 보고 싶네요 ㅎㅎ
또한 긁어오셨던 부분은 조금 어려워서, 대면 또는 회의할 때 설명해 주시면 좋을 것 같아요!! 😅

Comment on lines +483 to +489
do {
let responseDto = try result.map(TmapAddressSearchingResponseDto.self)
self.updateData(model: responseDto.toDepartureLocationModel(latitude: latitude, longitude: longitude))
} catch {
print(error.localizedDescription)
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분에 do~catch 인 것 처럼 다른 부분도 do-catch 사용 하셨는데
어떠한 에러를 잡아서 처리하기 위해 사용 하셨는지 궁금합니다 ! 🤔

또는 어떠한 에러가 발생하는 경우가 생길까요? 🙋‍♂️

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

파싱하는 부분에서 에러가 생길 수 있어서
여태 모든 서버 통신 함수는 do~catch 를 사용한 것 같고
저 또한 그대로(죄송합니다😇) 사용했는데요

다른 VC에서도 확인해보니 파싱 실패시 print(error.localizedDescription) 로 print를 찍어주는걸로만 예외처리를 해온 것 같네요
근데 이렇게 되면 사실상 예외처리를 한게 의미가 없어진다고는 생각합니다

이번 기능 연결하고 네트워크 쪽 리팩토링 진행해보고 싶은데 그때 또 코드리뷰 갈겨주십쇼..
예리한 질문 덕분에 저도 생각을 다시 해봤네요 꾸벅꾸벅

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

없는 곳도 있지만, 동시에 do-catch사용하는 부분이 있었는데요!

"그냥 코드들을 읽어보다가 여기는 없는데, 여기는 있네?" 라고 과거에 생각해 보다가 마침 소진님이 사용하시는 거 보고 궁금하여 질문을 해본 거였습니다 ㅎㅎ

저도 중복 되는 부분도 리팩토링 할 생각이 있는데, 2차 업데이트 끝나고 여유있으면 같이 작업해보아요~ 💪💪

Comment on lines +1 to +41
//
// BaseView.swift
// Runnect-iOS
//
// Created by Sojin Lee on 2023/09/25.
//

import UIKit
import SnapKit

protocol BaseViewProtocol {
func setDelegate()
func setUI()
func setLayout()
}

class BaseView: UIView, BaseViewProtocol {
// MARK: - Initializer

override init(frame: CGRect) {
super.init(frame: frame)

setDelegate()
setUI()
setLayout()
}

@available(*, unavailable)
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

// MARK: - Setup Methods

func setDelegate() { }

func setUI() { }

func setLayout() { }
}

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오.. 리팩터링할때 정말 유용할 것 같습니다 👍👍👍

지도 선택 | 검색 | 현재 위치 설정 하는 경우는 세 개의 파일에서 사용되기 때문에 싱글톤으로 수정하였습니다
Copy link
Collaborator

@thingineeer thingineeer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

싱글톤 굿 잡 👍

Comment on lines +24 to +28
final class SelectedInfo {
static let shared = SelectedInfo()
var type: SelectedType = .other

private init() {}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굿잡

Comment on lines +483 to +489
do {
let responseDto = try result.map(TmapAddressSearchingResponseDto.self)
self.updateData(model: responseDto.toDepartureLocationModel(latitude: latitude, longitude: longitude))
} catch {
print(error.localizedDescription)
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

없는 곳도 있지만, 동시에 do-catch사용하는 부분이 있었는데요!

"그냥 코드들을 읽어보다가 여기는 없는데, 여기는 있네?" 라고 과거에 생각해 보다가 마침 소진님이 사용하시는 거 보고 궁금하여 질문을 해본 거였습니다 ㅎㅎ

저도 중복 되는 부분도 리팩토링 할 생각이 있는데, 2차 업데이트 끝나고 여유있으면 같이 작업해보아요~ 💪💪

Comment on lines 14 to 19
/// 현재 위치 | 검색 | 지도에서 선택 중 분기처리를 해주기 위함
enum SelectedType {
case other
case map
}

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확실히 깔끔쓰 하네요

@513sojin 513sojin merged commit c7a8d73 into Runnect:develop Nov 14, 2023
1 check passed
let documents: [Document]

func toDepartureLocationModel(latitude: Double, longitude: Double) -> DepartureLocationModel {
let roadName = self.documents[0].roadAddress.buildingName ?? "내가 설정한 출발지"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@513sojin
여기는 코드를 보면 중간에 옵셔널일 경우가 없어서 그냥 없애거나 중간에 옵셔널 타입을 넣어야겠습니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

생각해보면 아무 것도 안온다고 해도 nil이 아니라 빈 문자열이 오겠네요 ... 조언 감사합니당 !! 근데 요 친구 어차피 사용 안해서 없애줄게요 ㅎ.ㅎ

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네네 제가 없앨게요~~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat] #191 - 현재 위치 / 지도에서 선택하기 기능 추가
2 participants