일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- NotificationCenter
- mvvm
- Failed to register bundle identifier
- 아이폰
- 부트캠프
- UIResponder
- contentInset
- 야곰아카데미
- 스타트업주니어로살아남기
- viewcontroller
- IOS
- 스위프트
- delegation
- 독후감
- Codegen
- NumberFormatter
- View Life Cycle
- 독서후기
- Navigation
- SWIFTUI
- roundingMode
- 책후기
- SWIFT
- human interface guidelines
- Mock
- Info.plist
- Modality
- @available
- xcode
- Structures and Classes
- Today
- Total
호댕의 iOS 개발
[TWL] 21. 11. 13 ~ 21. 11. 21 (Double.nan / LLDB / Character / NumberFormatter / compactMap) 본문
[TWL] 21. 11. 13 ~ 21. 11. 21 (Double.nan / LLDB / Character / NumberFormatter / compactMap)
호르댕댕댕 2021. 11. 21. 17:47프로그래밍을 하고 프로젝트를 수행하며 나보다 잘하는 사람들을 숱하게 보게 된다. (가끔 자괴감이 들기도 한다)
하지만 야곰이 말씀하셨던 것처럼 다른 사람과 비교하지 말고 과거의 나와 비교하자!
(물론 과거의 나보다 성장하지 않았다면 그것은 큰 문제이다)
불과 3~4개월 전만 해도 정말 Xcode를 어떻게 켜는지 조차 몰랐고 반복문 조건문도 전혀 몰랐었다. 아직 많이 부족하지만, 또 많이 성장한 만큼 할 수 있다는 생각으로 공부해나가자!!
학습한 내용
# nan (not a number)
프로젝트를 진행하며 처음에는 0으로 나눌 경우에 대해 오류처리를 해주려고 했다.
하지만 Double에 nan이라는 타입 프로퍼티가 존재했다.
nan은 모든 값과 같지도, 크지도, 작지도 않다. (심지어 자신도 포함해서 비교할 수 없다)
따라서 == 연산자를 사용할 수 없고, isNaN을 사용해서 nan인지 파악해야 한다.
출처: https://developer.apple.com/documentation/swift/floatingpoint/1641652-nan
또한 nan을 통해 연산을 할 경우 그 값은 nan이 나오게 된다.
# compactMap
compactMap은 nil이 아닌 결과를 포함하는 배열을 반환해주는 인스턴스 메서드이다.nil인 값을 제외하고 반환을 해주기 때문에 옵셔널도 바인딩이 되서 나오게 된다.
따라서 map을 사용하면 옵셔널 타입으로 반환이 될 수 있지만 compactMap을 사용하면 옵셔널이 바인딩 된 배열 타입으로 반환되게 된다.
출처: https://developer.apple.com/documentation/swift/sequence/2950916-compactmap
# LLDB
이번 주에는 LLVM의 프론트엔드 디버깅 툴인 LLDB에 대해 배웠다.
기존에는 print를 직접 찍어보거나 breakpoint를 걸어서 오류를 찾아보곤 했었는데 새로운 디버깅 방법을 배우게 됐다.
아직 LLDB에 익숙하진 않지만 계속 사용해나가면서 익혀야겠다!!
Git도 처음에는 정말 어려웠는데 지금은 그래도 좀 익숙해졌으니 의식적으로 많이 사용하려고 해야겠다!!
# Character
빈 문자열을 Character로 변환하려 했더니 다음과 같은 오류가 발생했다.
Can't form a Character from an empty String
왜 변환이 안되는지는 공식문서에 답이 있었다.
The Character type represents a character made up of one or more Unicode scalar values, grouped by a Unicode boundary algorithm
Character 타입의 경우 하나 이상의 유니코드 값으로 되어 있는 것이다! 즉, 빈 문자열은 값이 하나도 없기 때문에 변환이 안되는 것이었다.
항상 답은 공식문서에 있는 것 같다!! 막히는 부분이 있다면 공식문서를 통해 찾아보자.
# SOLID SRP(단일 책임 원칙)
단일 책임 원칙이 타입 당 하나의 메서드만 가져야하는 것이 아닌가 오해를 하고 있었다.
하지만 SRP는 메서드의 갯수로 확인하는 것이 아니었다. 말 그대로 하나의 책임만 가지고 있어야 하지만, 하나의 메서드를 가지고 있어야 하는 것은 아니었다.
예를 들어 Queue를 관리해주는 타입이 있고 그 안에 queue를 빼주고 더해주는 메서드가 있다고 생각해보자.
이 메서드들은 전부 Queue를 관리해준다는 하나의 책임을 가지고 있다.
그러므로 이 경우는 메서드가 여러 개이더라도 단일 책임 원칙을 위배한다고 볼 순 없다.
다만 여기서 DB의 Queue를 가져오거나 하는 메서드가 있다면 Queue를 관리하는 책임에 벗어나고 있기 때문에 단일 책임 원칙을 위배한다고 볼 수 있다.
# NumberFormatter
NumberFormatter.Style
.none | 1235 |
.decimal | 1,234.1324 (이 때 nan도 NaN으로 표기된다) |
.percent | 12% |
.scientific | 1.2345678E3 |
.spellOut | one hundred twenty-three |
.ordinal | 3rd |
.currency | $1,234.43 |
.currencyAccounting | ($1,234.43) |
.currencyISOCode | USD1,234.43 |
.currencyPlural | 1,234.34 US dollars |
.maximumFractionDigits: 소수점 얼마까지 표현할 것인지 작성
'Software Engineering > TIL' 카테고리의 다른 글
[TWL] 21. 12. 06 ~ 21. 12. 10 (JSON, TableView, AutoLayout) (0) | 2021.12.10 |
---|---|
[TWL] 21 . 11 .22 ~ 21 .11 .28 (ARC, App Life Cycle, reversed 시간 복잡도, localizedError, git stash) (0) | 2021.11.29 |
[TWL] 21. 11. 08 ~ 21. 11. 12 (프로토콜, 시간 복잡도, 스택 / 힙 영역, SOLID) (0) | 2021.11.13 |
[TIL] 21.11.04 ~05 Today I Learned (0) | 2021.11.06 |
[TIL] 21.11.01 Today I Learned (UML, KVO, Property Observer) (0) | 2021.11.02 |