🍎 iOS/🕊️ swift

    [swift]Date DateFormatter CheetSheet

    Date와 DateFormatter 에 대한 내용을 가끔 쓰는데 쓸때 마다 조금씩 헷갈려서 내용을 정리해 두려고 한다. 고고 📅 Date란? struct Date A specific point in time, independent of any calendar or time zone. 시간의 특정한 포인트로, 어떠한 캘린더나 타임존으로 부터 자유하다고 한다. 그래서 지금 시간을 찍어보면 Date 를 찍어보면 이런 식으로 나온다. 2022-10-01 11:40:34 +0000 년도-월-일 시간:분:초 +시간대 이런 포멧이다 사실은 지금이 8시 인데 11시 로 나오는 이유는 표준 시간대(UTF)를 사용하기 때문이다. (그래서 영국 시간 기준인가? 봤더니 지금 영국도 써머타임 때문에 저 시간에서 약간 오차가 있..

    [swift]@property wrapper

    combine을 공부하면서 Published 의 구현부를 뜯어보는데 @propertyWrapper struct Published @propertyWrapper 라는 것이 있는 것을 보았다. 많이 들어본 것 같았는데... 저게 뭘까? @propertyWrapper 를 먼저 공부해 보자! 🎁 @property wrapper 란? @propertyWrapper 공식문서 @property wrapper 공식문서가 language guide 에 있는게 조금은 충격이었다. language guide 열심히 읽었어서 다 아는 내용인줄 알았는데... 놓친게 있다 다시 한번 읽어야 할듯...ㅎ 공식문서에 씌여 있는 정의를 보자. property wrapper는 프로퍼티가 저장되는 방법을 관리하는 코드와 프로퍼티를 정의하..

    [swift] 의존성 주입으로 코드를 예쁘게 하자!

    🤔 의존성 주입을 하는 이유? 의존성 주입을 알아보기 전에 의존성 주입이란 것을 왜 해야하는 것일까? 객체끼리의 의존도가 높으면 한 객체에서 수정이 일어나게 되면 연관된 모든 객체를 손봐야 하는 경우가 있다. Unit test 를 할 경우에도 한 객체의 Test 만 진행하고 싶은데 의존도가 높으면 그럴 수가 없다. 유지보수를 편리하게 하기 위해서라도 의존성 주입을 하면 장점이 많이 생긴다. 💙의존성 주입의 장점💙 객체간의 의존성을 줄여준다. Unit Test가 용이해진다. 코드의 재활용성이 올라간다. 유지보수에 좋다. 그럼 의존성 주입이 무엇인지 알아보자. 😘 의존성 (Dependency) struct Coffee { let name: String } struct Store { let baverage: ..

    [swift] 부동 소수점 오류가 나는 이유

    🎲 컴퓨터가 정수를 표현하는 방법 Integers (정수) 소수점이 없는(분수 부분이 없는) 숫자를 의미 한다. swift 의 Int는 크기에 따라 다양한 타입을 제공한다. Int 가 컴퓨터에 어떤 형식으로 저장 되는지보자. print("Int8 max: \(Int8.max)") print("Int8 min: \(Int8.min)") print("UInt8 max: \(UInt8.max)") print("UInt8 min: \(UInt8.min)") //Int8 max: 127 //Int8 min: -128 //UInt8 max: 255 //UInt8 min: 0 Int8 과 Uint8 의 최대값과 최소값을 찍어보았다. 우선 여기에서 뒤에 붙은 8은 비트의 수를 의미한다. Int8 이라는 것은 8비트를 ..

    [swift] 고차 함수 요목조목 보기

    🎛 고차함수란? 고차함수는 다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수 이다. → 클로저를 파라미터로 받거나 → 클로저를 리턴하는 경우 Foundation 에서 기본으로 제공하는 고차함수에는 map, compactMap, flatMap, filter, reduce 등이 있다. 🗺 map 기존 데이터를 변형(transform) 해서 새로운 컨테이너에 담아주는 고차함수이다. map 은 파라미터로 클로저를 받는다. 여기에서 받는 클로저는 시퀸스의 요소들을 파라미터로 가지고 있어야 하고, 요소를 변형해서 반환한 것을 리턴해야 한다. 예시를 보자. [0, 1, 2, 3, 4] → [0, 2, 4, 6, 8] 배열의 요소를 2배 곱해주는 로직이다. let numbers: [Int] = [0..

    [iOS] Number Fomatter

    📋 Fomatter 란? 값을 다양한 텍스트 값으로 변환해 줄 수 있는 추상 타입이다. class Formatter : NSObject Foundation 에서 지원하는 Fomatter 포멧 설명 ByteCountFormatter 바이트값을 KB, MB, GB 등으로 변환해줌 DateFormatter 날짜를 변환해줌. DateComponentsFormatter "약 5분 남음" 같은 문자열을 만들어 반환해줌 DateIntervalFormatter 시간 사이 간격을 문자로 반환해줌 MeasurementFormatter 수치를 문자로 반환해줌 NumberFormatter 숫자를 문자로 반환해줌 PersonNameComponentsFormatter 사람의 이름을 정해진 규칙에 따라 반환해줌 이런 다양한 포메터..

    [swift] Subscript 구현하기

    🤔 Subscript란? [ ] 을 이용하여 (단축키 처럼)값에 접근할 수 있도록 해주는 문법이다. 우리가 Array에서 [index] 를 사용해서 접근하거나, Dictionary 에 [key] 값으로 접근 했던 문법들은 subscript 로 구현되어 있는 것이었다. 클래스, 구조체, 그리고 열거형은 콜렉션, 목록, 또는 시퀀스의 멤버 요소에 서브스크립트를 구현해 줄 수 있다. 📖 Subscript 문법 subscript(index: Int) -> Int { get { // Return an appropriate subscript value here. } set(newValue) { // Perform a suitable setting action here. } } 연산 프로퍼티의 문법과 아주 유사하다...

    [swift] String.Index 는 무엇일까?

    🧐 String.Index 타입이란? 스위프트에서는 String 타입의 인덱스를 나타내기 위해서 Int 를 사용하지 않고 String.index 라는 특수한 타입을 사용한다. 그럼 이 값을 인트로 변환할 수는 없는 건가? 할 수 가 없다. 에러가 뜬다.😭 우선 스트링은 heap 에 저장 된다. (WWDC에서 말한 내용이니 이것은 맞다.) 🚨여기서 부터 뇌피셜 주의 String.Index 의 공식 문서를 보면 이 타입이 인스턴스로 var hashValue: Int 를 가지고 있고 메서드로는 func hash(into: inout Hasher) 를 가지고 있다. 추측하기로는 String.Index은 뭔가 우리가 알수 없는 무슨 값을 가지고 있고 그걸 구현되어 있는 해쉬 함수에 넣어보니 어떤 Character..

    [swift] Substring는 왜 있는 걸까?

    🗒 Substring 이란? String 타입을 가지고 메서드로 변형을 하게 되면 이상하게 return 타입이 String 이 아니고 Substring 이다. 애플 공식문서가 말하길 Substring 타입은 String 타입과 거의 동일한 메서드를 가지고 있기 때문에 String처럼 사용할 수 있는 타입이라고 한다. @frozen struct Substring 🧐 Substring이 존재하는 이유 위의 말에 따르면 String이나 Substring이나 별 다를게 없다는 건데 그럼 왜? Substring 타입을 따로 만들었을까? (귀찮게...) 바로 성능 최적화 때문이라고 한다. Substring 타입은 String을 변환했을 때 생긴다. 그래서 저장 공간을 아끼기 위해서 변환하기 전의 String 타입의..