Swift
-
-
[Swift] struct 는 왜 메모리릭 걱정을 안해도 되는걸까?Swift 2023. 1. 26. 13:58
코드를 치다 문득 내가 왜 class 에서만 weak self 를 해주고 있지? 일종의 게슈탈트 붕괴를 겪게 되었다. 그래서 다시 공부해보자 ~! 우선 1차적으로 class 와 struct 이 저장되는 메모리 영역이 다르다 struct -> Stack 혹은 Heap class -> Heap 에 저장됩니다. 경우에 따라 struct 또한 Heap 에 저장됩니다. Heap 에 저장될 경우 관리 대상이 됩니다. 바로 ARC 이죠. 기본적으로 class 는 참조 타입이기에 만약 더 이상 참조하고 있지 않은 인스턴스라면 메모리에서 내려주어야 합니다. 그것을 자동으로 해주는 것이 ARC 라는 시스템이죠. 만약 struct 의 인스턴스가 class 인스턴스의 property 로 존재할 경우 Heap에 저장될 것입니다..
-
-
[Swift] CodingKeys 작성, 이제 제발 그만하자 - JSONDecoder, keyDecodingStrategySwift 2023. 1. 15. 10:08
모두 잘알다 시피 스위프트는 기본적으로 camelCase 를 사용한다 하지만 많은 json Response 들이 snake case 로 들어온다 그래서 이걸 coding keys 로 아래와 같이 굉장히 지저분하게 많은 양의 코드를 작성해주어야하는데 여간 귀찮고 짜증나는 일이 아닐수가 없다. 하지만 이제 이런거 그만하자~! 아래와 같이 JSONDecoder 의 메써드로 keyDecodingStrategy 가 있는데 자동으로 snake -> camel 로 바꿔준다 저거 한줄이면 수많은 codingKeys 가 필요없다. 너무 좋다~!
-
[Combine] 시간차를 두고 값을 내보내주자 - debounceSwift 2023. 1. 14. 10:05
아래와 같은 화면을 구현했습니다 👇👇 텍스트필드에 들어오는 입력을 즉각으로 계속해서 필터링해서 화면을 그려주면 우리의 아이폰은 죽어버리거나 뜻하지 않는 프리즈현상 혹은 에러를 마주할지도 몰라요... 그래서 받은 입력받은 값을 시간차를 두고 필터한 다음에 화면에 그려주고 싶은데요. 그럴때 사용할 수 있는 메써드가 combine 의 debounce 입니다 애플 공식 도큐먼트를 읽어보면 시간차를 두고 요소를 뱉어낸다고 되어있네요. 아래 실행순서를 읽어보면 입력이 들어오고 -> 시간차를 두고 -> 필터하고 -> 화면에 뿌려줍니다. 이렇게 하면 모든 입력에 예민하게 반응할 필요가 없겠죠? 결과적으로 안정성이 확보되었다고 생각이 듭니다~!
-
[Combine] Publishers 를 합쳐서 한번에 처리해주자 - combineLatestSwift 2023. 1. 13. 23:56
이런 화면을 구현하고 싶습니다 👇👇 입력받은 텍스트로 결괏값을 필터해서 맞는 결과를 보여주는 것입니다 ✅ 구현1 - didSet 예전에 저 같았으면 아마도 아래와 같은 로직으로 코드를 짰을 것 같습니다 👇👇 (검증된 코드가 아닙니다 그냥 대충 이런식으로 했을것 같다~ 입니다) searchText 가 입력될때 마다 didSet 이 실행되고 거기서 필터하고.. 하지만 경험상 이렇게 되면 굉장히 지저분해지니다. 왜냐? Property 에 저렇게 didSet 이 달리고 달리고 하면서 이게 intent 도 많아지고 한눈에 봤을때 안읽히는 문제가 있습니다 그럼 어떻게 해야할까요? final class HomeViewModel: ObservableObject { private let dataService = Coin..
-
[SwiftUI] .transition(.move(edge: Edge))) - 방향성있는 애니메이션을 구현해보자Swift/SwiftUI 2023. 1. 13. 23:15
구현해볼 화면 👇👇 마치 TabView Page 처럼 나타가는 화면을 직접 구현해보자 List 가 두개 있다 Bool 에 의해 촥촥 하나씩 사라지면서 하나가 나타난다 이때 어떻게 구현하면 될까? SwiftUI는 아주 쉽게 구현할수 있다 아래 코드 처럼 하나는 .leading, 하나는 .trailing 을 주면 하나는 왼쪽에서 들어오고 나가고, 하나는 오른쪽으로 들어오고 나간다 그러면 마친 TabView 의 Paging 같은 효과를 낼수 있다 ㅎ