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

Week5 Assignment - Fix Calculator & Make NetworkModel #13

Open
wants to merge 17 commits into
base: kyungsoo
Choose a base branch
from

Conversation

kyxxgsoo
Copy link

@kyxxgsoo kyxxgsoo commented Sep 2, 2022

Calculator

  1. 화면에 보여질 수 있는 상한선과 하한선을 설정해 길이를 초과할 경우 지수 표기법으로 표시되게 수정했습니다.
  2. 화면에 0이 출력된 상태에서 0을 입력하면 추가되는 버그를 수정했습니다.
  3. HStack과 VStack을 grid로 수정하는 과정에서 0을 표기하는 중 문제가 생겨 아직 수정중입니다.

Network Module

예시 코드를 보고 네트워크 모듈을 설계해보고, 네이버 오픈 API를 사용해보았습니다.

코드를 참고하여 모듈을 설계하는 과정에서 AttributedString, URLComponents 등과 같은 생소한 메서드들이 많아 그 부분을 중점적으로 공부했습니다.

또한, 네트워크 모듈의 전체적인 로직을 이해하기위해 노력했습니다.

<요청을 하기 위한 메서드 로직>

  1. URLComponents()를 통해 주소를 셋팅한다.
    이때, base주소가 동일하거나, 중복을 없애거나, 뒤에 다양한 경로가 올 수도 있기 때문에 URLComponents를 사용한다.
  2. URLSession.shared.dataTask()를 통해 다른 쓰래드의 대기큐에 task를 넣어준다.
    (메인 쓰레드에서 처리하지 않는 이유 → 메인 큐에서 동기적인 작업을 요청하면 데드락을 발생하는 경우가 생길 수도 있기 때문에 웬만하면 메인큐에서 sync를 하는 작업은 없어야 한다.)
  3. 응답 요청에 따른 데이터를 받는다
    1. 에러가 있는지 없는지 검증한다
    2. 받은 응답이 성공적인 값인지 확인한다. [ex](200…299).contains…
    3. data를 받는데 이 데이터값은 옵셔널이므로, 옵셔널 처리를 해주어야 한다.
  • 이미지 검색 api기능 추가로 구현해보았습니다. 해당 사진을 클릭하면 사진을 제공하는 홈페이지로 넘어가게 하고싶었는데, api에서 링크를 제공하지 않아 구현하지 못하였습니다.
  • http연결이 되지 않는 관계로 이미지가 보이지 않으면 placeholder를 보이게끔 설정하였습니다.

@@ -9,6 +9,9 @@ import Foundation

extension Numeric {
var exponentialNotation: String {
return Formatter.exponentialNotation.string(for: self) ?? ""
guard let exponentialNotationString = Formatter.exponentialNotation.string(for: self) else {
return "오류"

Choose a reason for hiding this comment

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

Error 를 정의해서 처리하면 어떨까요?

let decimal = Int(decimalString),
var decimalFormat = numberFormatter.string(from: NSNumber(value: decimal))
else { return "오류"}
if 1 < decimalFractionComponents.count, let fractionString = decimalFractionComponents.last {

Choose a reason for hiding this comment

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

1 < decimalFractionComponents.count
decimalFractionComponents.count > 1
위 두 코드를 우리는 어떻게 읽을까요?

  • 1 보다 값이 큰 경우
  • 값이 1보다 큰 경우

가독성을 고려해볼까요?

Choose a reason for hiding this comment

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

적절한 줄바꿈은 가독성을 증가시킬 수 있습니다

@@ -40,7 +43,14 @@ class CalculatorManager: ObservableObject {
// MARK: Method(s)

func buttonColor(_ button: Button) -> (Color, Color) {

Choose a reason for hiding this comment

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

method 는 동작을 하는데, 네이밍에 동작이 없는 것 같습니다.

Choose a reason for hiding this comment

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

Color 두개를 리턴하는데, method 만 보면 어떤걸 리턴하는지 유추하기 힘드네요

init?(htmlString: String) {
let option: [NSAttributedString.DocumentReadingOptionKey: NSAttributedString.DocumentType] = [.documentType: .html]
guard let htmlData = htmlString.data(using: .utf16),
let nsStr = try? NSAttributedString(data: htmlData, options: option, documentAttributes: nil)

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
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants