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

부스트캠프 6기 iOS 코드 리뷰어 지원 #210

Open
wants to merge 418 commits into
base: review
Choose a base branch
from
Open

부스트캠프 6기 iOS 코드 리뷰어 지원 #210

wants to merge 418 commits into from

Conversation

Hyunsik-Yoo
Copy link

안녕하세요 👋
부스트캠프 6기 iOS 코드 리뷰어로 지원하게된 유현식입니다.
이번 참여를 통해 코드를 통해 많은 얘기를 주고받으면서 서로 배우고 성장하는 시간이 되었으면 좋겠습니다.🙇‍♂️

seoulboy and others added 30 commits December 8, 2020 20:39
(#25 #26) ActivityScene TotalView 연결 및 Date PickerView 구현
(#97) feat: running split scene 구현
(#91) feat: Location accuracy에 따른 값 전송 유무 로직 추가
(#88) Motion Type에 따라 자동으로 러닝을 일시정지 및 재시작한다
SHIVVVPP and others added 28 commits December 20, 2020 01:46
(#191) fix: 다크모드 및 라이트모드 toggle시 annotation이 바뀌는 버그 수정
fix: Calorie 누적 오류 Int -> Double
(#196)fix: pausedWorkout 사운드 문제
(#198) feat: split detail 데이터 바인딩
}

final class ActivityCoordinator: BasicCoordinator<ActivityCoordinationResult> {
let factory: ActivitySceneFactory
Copy link
Author

Choose a reason for hiding this comment

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

ActivityCoordinator 클래스 내부에서만 사용되는 변수로 보여집니다.
해당 변수를 public하게 공개시킨 이유가 있는지 궁금합니다!
공개시킬 이유가 없다면 private화 시키는 것을 제안드립니다!

showActivityDetailScene(activity: activity, detail: detail)
}

func showActivityViewController() {
Copy link
Author

Choose a reason for hiding this comment

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

해당 함수도 위 변수와 마찬가지로 클래스 내부에서만 사용되는 함수로 보여집니다!
외부에서도 사용되는 public한 함수가 아니라면 private화 시키는 것을 추천드립니다.
내부에서만 사용되도록 구현된 함수가 외부에 공개되면 어디선가 의도하지 않게 호출될 수 있기 때문입니다!

import UIKit

final class ActivityDetailCoordinator: BasicCoordinator<Void> {
let factory: ActivityDetailSceneFactory & RouteDetailSceneFactory
Copy link
Author

Choose a reason for hiding this comment

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

여기 지역변수들도 동일한 이유로 마찬가지로 private화 제안드립니다!

import UIKit

final class ActivityListCoordinator: BasicCoordinator<Void> {
let factory: ActivityListSceneFactory
Copy link
Author

Choose a reason for hiding this comment

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

동일한 이유로 private화 제안드립니다!

fatalError("start() method must be implemented")
}

deinit {
Copy link
Author

Choose a reason for hiding this comment

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

선언 순서가 다른클래스들과 동일하면 더 일관성있게 보일 것 같습니다.
다른 클래스들에서는 생성자 다음 소멸자가 선언되어있는것으로 보여지니 통일하면 더 좋을 것 같네요!

import Foundation

extension CLLocationCoordinate2D {
static func computeSplitCoordinate(from points: [CLLocationCoordinate2D], distance: Double) -> [CLLocationCoordinate2D] {
Copy link
Author

Choose a reason for hiding this comment

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

해당 함수는 사용되지 않는것으로 보여집니다!
사용하지 않는 함수라면 삭제하는 것을 권장드립니다.

Copy link
Author

Choose a reason for hiding this comment

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

함수의 내용과 이름이 쉽게 이해되지 않는 것 같습니다.
내용을 보면 좌표들(points)을 받아서 좌표들 사이의 누적 거리가 distance이상되는 좌표들만 다시 반환하는 것으로 이해를 했습니다.
computeSplitCoordinate라는 이름이 해당 내용을 지칭하기에는 조금 광범위 한 것 같습니다.

let initialValue: Double = 0.0
var splitCoordinates = [CLLocationCoordinate2D]()

points.reduce(initialValue) { (acculmatedDistance, currentPoint) -> Double in
Copy link
Author

Choose a reason for hiding this comment

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

reduce를 반복문 용도로 사용하는 것으로 이해를 했습니다.
반복문 용도로 사용하려면 reduce보다는 반복문에 사용되는 친구들로 사용하면 조금더 이해하기 수월할 것 같습니다!

}

deinit {
print("[Memory \(Date())] 🌙ViewModel⭐️ \(Self.self) deallocated.")
Copy link
Author

Choose a reason for hiding this comment

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

클래스들마다 비슷한 부류의 메모리 문구를 사용할 것이라면 아래처럼 하나의 프로토콜로 사용하는 방법도 추천드립니다!

extension NSObjectProtocol {

    func deinitLog(objectName: String? = nil) {
            print("\(self.className) deallocated.")
    }
}

closeSignal.send()
}

func viewDidLoad() {}
Copy link
Author

Choose a reason for hiding this comment

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

내용이 없는 함수라면 삭제해도 좋을 것 같습니다!

struct ActivityDetailConfig {
let titleDate: String
let title: String

Copy link
Author

Choose a reason for hiding this comment

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

어떤 기준으로 줄바꿈으로 변수들을 나누었는지 궁금합니다.

cancellable = Timer.TimerPublisher(interval: 0.8, runLoop: RunLoop.main, mode: .common)
.autoconnect()
.sink { date in
self.timeIntervalSubject.send(date.timeIntervalSinceReferenceDate)
Copy link
Author

Choose a reason for hiding this comment

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

클로저 내부 self참조로 retain cycle이 발생하지 않을까 의심이 됩니다.

locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
Copy link
Author

Choose a reason for hiding this comment

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

configureLocationManager와 동시에 startUpdatingLocation()를 진행하면 최초 권한 획득전에는 문제가 없는지 궁금합니다.
최초 진입시에는 권한획득 전이라 권한 획득 팝업이 발생할 것으로 예상되는데 startUpdatingLocation()를 호출하면 에러가 발생할 것 같습니다. 권한 획득하기 전까지의 로직을 만들어야할 것 같습니다!

func locationManager(_: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last,
location.horizontalAccuracy.sign == .plus,
// location.verticalAccuracy.sign == .plus,
Copy link
Author

Choose a reason for hiding this comment

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

해당 코드는 어떠한 이유로 주석처리가 되었는지 궁금합니다!

}

func stop() {
pedometer.stopUpdates()
Copy link
Author

Choose a reason for hiding this comment

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

start시에는 isActive = true 구문이 있는것 처럼 stop시에도 대칭되도록 isActive = false 구문이 필요할 것 같습니다.
현재 상태는 한번 시작되면 isActive가 false가 되지 않는 것 같습니다!

}

func startCountingSteps() {
if isActive { return }
Copy link
Author

Choose a reason for hiding this comment

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

함수 이름에 맞도록 조금 더 명확한 구현을 위해서는

if isActive { return }
isActive = true

func start() 로 가는게 좀더 명확하지 않을까 제안드립니다!
func startCountingSteps()에서는 함수 이름에 따라 스텝 카운팅만 되도록요!

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

Successfully merging this pull request may close these issues.

4 participants