본문 바로가기

Swift

(14)
SwiftUI_Tutorial 간단 정리(2/3) - Drawing and animation 이전 글: https://dev-doogie.tistory.com/23다음 글: https://dev-doogie.tistory.com/26Drawing paths and shapes GeometryReader상위 뷰의 크기에 맞춰 하위 뷰를 조정하는 기능예를들어 여러 화면에 서 쓰이는 A뷰가 있다고 가정해보겠다그런데 A뷰를 구성하는 뷰들을 고정값들로 배치하게 된다고면 부모뷰의 크기와는 상관 없이 오로지 고정된 값으로만 구성이 되며다른 뷰 혹은 기기가 바뀌거나 회전 되었을 때, 너무 작음 혹은 크거나, 좌표가 벗어나버리는 일이 발생할 것이다그래서 GeometryReader { geometry in . . .}이 `Geomet..
SwiftUI_Tutorial 간단 정리(1/3) - SwiftUI essentials 이 글은 누군가에게 지식을 전달하기 위한 글 보다는 개인이 알아보기 편하게 정리한 글 입니다. 다음 글 : https://dev-doogie.tistory.com/24 SwiftUI_Tutorial에는 크게 네 가지 챕터가 있다 SwiftUI essentials, Drawing and animation, App design and layout 그리고 Framework integration 그리고 Framework integration 에는 UIKit과 연결하여 SwiftUI를 사용하는 방법 + watchOS, macOS에 관련된 내용들이 있는데나는 이 튜토리얼을 빠르게 공부 하고 TCA튜토리얼로 넘어가기, 더 나아가 현재 출시 되어 있는 어플을 SwiftUI로 전환하는 것이 목표이기 때문에 Framewo..
흔하디 흔한 TCA 기본 개념 정리 TCA의 기본 개념에 정리하기에 앞서- [참고자료] SwiftUI에서 MVVM 사용을 멈추자"라고 생각이 들었던 이유 TCA의 기본 개념에 정리하기에 앞서 왜 SwiftUI에서 MVVM이 필요 없는지에 대한 글이다 진짜 초 간단히 정리 하자면 이미 SwiftUI자체가 이미 MVVM의 구조를 내포하는데 왜 또 MVVM을 더하냐는 글이다 SwiftUI만으로도 MVVM수준의 아키텍처 문제는 해결되었으니 이제 더 상위 레이어의 아키텍처에 대해 고민해보아야 한다라는 글이다 MVVM은 뭔데?Model - View - ViewModel 의 대문자만 따온 패턴으로 주로 RxSwift와 자주 이용된 패턴이다. Data요청이 먼저냐 Binding이 먼저냐는 때에 따라 다르고 전체적인 로직은 아래와 같다 1. ViewMod..
Combine 기본 사용법 정리 - Publisher import Combine class SomeObject { var vsalue: String = "" { didSet { print(vsalue) } } var asdfasdf: String = "" { didSet { print(asdfasdf) } } } let someObject = SomeObject() let publisher = ["울릉도", "동남쪽", "뱃길 따라 이백리"].publisher _ = publisher.assign(to: \SomeObject.asdfasdf, on: someObject) //위 아래 두 개 다 같은거 _ = publisher.assign(to: \.asdfasdf, on: someObject) 근데 publisher는 애초에 정해진 값..
class의 배열만들기(약한 참조 하는 배열, weak array) 개발을 하다보니 class의 배열을 만들 일이 생겼다 정확히는 ViewController(이하 VC)의 배열을 만들고 deinit될 때는 해당 배열에서 없어져야 했다 딱 생각나는 방법이 두 가지가 있었는데 1. 해당 VC가 deinit될 때 배열에서 remove해주기 2. 해당 VC가 deinit되야 하는'곳'(예를 들변 pop되는 곳) 에서 remove해주기 딱 봐도 2번같은 경우에는 메모리가 해제되어야 하는 모든 부분을 알고 대응하기 어렵기 때문에 1번의 방법으로 가기로 했는데 이게 왠걸...? 너무나 당연한 얘기지만 배열에 VC가 추가되면서 참조를 하고 있기에 deinit이 호출이 안된다 ㅋ 그래서 생각난게 '약한 참조를 하는 배열을 만들면 되지 않을까? 근데 그걸 어케하지;;' -> 구글링 htt..
높이 조절 가능한 CustomModal(Half Modal) Swift에는 present할 때 화면 전체가 아니라 반만 차지하게 하도록 하는 기능이 있다 (swift half modal이라고 치면 한글 블로그도 디게 많으니 궁금하면 검색 ㄱㄱ) 그런데 이게 15부터만 사용이 가능하다 근데 우리 회사는 최소 타겟이 15라서 그냥 바로 사용하려 했는데 이게 왠걸... 진짜 진짜 half, 화면의 반 아니면 완전크게 이런식으로만 사용 가능한게 15부터고 크기를 커스텀 하려면 16부터 라는 것이다...ㄷㄷ 그래서 그냥 만들었다 @objc private func touchButton() { let customModal = CustomHalfModal() customModal.contentsView = TestView() self.present(customModal, ani..
Tableview pagination 리스트를 구현하다보면 아래 영상과 같이 페이지네이션을 해야할 때 가 많다(거의 다 라고 해야하나..;;) 아무튼 앱 개발 공부를 처음 할 때(부트캠프 할 때)는 새로운 배열이 들어올 때 마다 tableView(혹은 CollectionView)를 리로드 해버렸는데 이렇게 하면 이미지뷰에 이미지 할당 할 때 겁나 깜빡깜빡 거려서 메모리고 뭐고를 떠나서 꼴 보기가 싫었다... 그래서 페이지네이션 할 때는 추가되는 index에 해당하는 cell indexpath 만 append 해주고 해당 cell만 리로드 해주는 방식으로 구현하며 그 내용을 정리하려고 한다 ViewModel에서의 코드 private var listPageNumber = 0 private var listPageSize = 10 //MARK: -..
높이가 다른 이미지 다운로드 후 Cell에 할당 struct SectionInfoEntity { let imageUrl: String? var cellHeight: Double } Entity가 cellHeight변수를 가지고 있음 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return self.sections[safe: indexPath.row]?.cellHeight ?? 0.0 } entity에 저장된 height로 cell 높이 지정 private func imageSectionCell(tableView: UITableView, indexPath: IndexPath, sectionInfo: DisplayEventDetailEnt..