본문 바로가기

🍎 Swift76

[Swift🍎] RxGesture로 간편하게 View에 클릭이벤트 넣기 종종 StackView와 같이 터치 인터페이스와 관련없는 View 속성에 버튼을 넣고 싶은(넣어야 하는) 경우가 생긴다 보통 UITapGestureRecognizer를 사용해서 탭 제스처를 추가하는데,마침 이번 프로젝트에서는 RxSwift를 활용하고 있어서 더 간편하게 사용 가능한 RxGesture를 사용해 보았다  사용 방법1.  Xcode의 File > Add Package Dependency 메뉴를 선택하고 아래의 URL을 입력  →  https://github.com/RxSwiftCommunity/RxGesture GitHub - RxSwiftCommunity/RxGesture: RxSwift reactive wrapper for view gesturesRxSwift reactive wrapper.. 2024. 10. 17.
[Swift🍎] UIColor를 CGColor에 할당해야 하는 경우 사이드 프로젝트 진행 중 아래와 같이 UIColor를 CGColor로 할당해야 하는 경우가 있는데, 그 이유가 궁금해서 찾아보았다  먼저 두 가지 모두 색상을 나타내는 객체이지만 사용되는 환경과 목적에 따라 변환 유무가 결정된다  UIColor (UIKit 색상 객체)UIKit에서 제공하는 UI의 대부분의 시각적 속성에서 사용할 수 있다(ex. UIView, UILabel, UIButton...)OS와 iPad에 주로 사용되며, 다양한 기기 간 자동 색상 조정 및 다크모드 지원 같은 기능을 내장하고 있다let view = UIView()view.backgroundColor = UIColor.red  CGColor (Core Graphics 색상 객체)레이어 관련 속성에서 색상을 설정할 때 필요하다레이어.. 2024. 10. 16.
[Swift🍎] RxSwift에서 bind와 driver의 차이 1.  BindObservable을 UI요소에 바인딩 할 때 사용하며 데이터 스트림을 직접적으로 UI와 연결할 수 있다주요 특징1.  간단한 코드로 UI 업데이트를 할 수 있다     → OnNext만 가지고있기 때문에 단순히 생성되는 값을 넘기고 싶을 때 유리하다2.  스레드 처리: 일반적으로 메인 스레드에서 동작하지 않으며 직접적으로 스레드를 지정해 주어야 할 수 있다3.  에러 처리: 에러 처리를 포함하지 않는다     → onNext만 가지고 있어서 error&completed 가 발생하지 않는 무한한 이벤트를 방출할 수 있다     → 옵저버블이 eroor를 방출하면 해당 옵저버블은 종료되며, 따로 에러를 처리하거나 UI에 반영할 수 없다4.  메모리 관리: bind는 Disposable을 반환.. 2024. 10. 14.
[Swift🍎] UISearchController 키보드 숨김처리 UISearchController로 네비게이션바에 서치바 생성 후 테이블뷰에 데이터를 받아오는 상황!!서치바가 활성화 된 상태에서 테이블뷰를 스크롤했을 때 키보드가 내려가지 않는다  탭 제스처 인식기도 써보고 여러가지를 해봤는데,일단 텍스트뷰가 없는 상황에서는 탭 제스터 인식기는 적절하지 못하다고 함(실제로 동작 안함) 테이블뷰 Delegate를 사용하는 방법도 있는데, 딜리게이트는 복잡하기도 하고 코드가 길어져서 선호하지 않는 편이다.. 그래서 RxSwift와 endEditing을 이용해서 처리해 보기로 했다 gymTableView.rx.willBeginDragging .subscribe(onNext: { [weak self] _ in self.. 2024. 9. 26.
[Swift🍎] pushViewController, setViewControllers 1.  pushViewController현재 네비게이션 스택의 가장 위에 새로운 ViewController를 추가화면 전환 시, 이전 ViewController는 네비게이션 스택에 남아 있어서 Back 버튼을 눌러 이전 화면으로 돌아갈 수 있다(새로운 ViewController가 현재 스택의 맨 위에 추가)let newVC = NewViewController()self.navigationController?.pushViewController(newVC, animated: true)→ 단계적인 네비게이션의 흐름  2.  setViewControllers현재 네비게이션 스택을 교체네비게이션 스택에 있는 모든 ViewController를 대체하고, 새로운 ViewController 목록을 스택에 설정Back .. 2024. 9. 25.
[Swift🍎] CollectionView 뜯어보기 1.  기본적인 컬렉션뷰의 구조class ViewController: UIViewController { //콜렉션뷰 선언 var collectionView: UICollectionView! //데이터 배열 let data = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"] override func viewDidLoad() { super.viewDidLoad() //1. 콜렉션뷰 레이아웃 설정 (기본적인 그리드 레이아웃) let layout = UICollectionViewFlowLayout() layout.itemSize = CGSize(width: 100, height: 100) //.. 2024. 9. 5.
[Swift🍎] TabBarController로 탭바 구성하기 코드 베이스로 구성할 것이기 때문에 씬딜리게이트에서 willConnectTo 제외하고 모두 지워준다   기본적인 골격TabBarController을 rootViewController으로 지정해준다   탭바에 들어갈 viewController 생성 후 넣어줌   여기까지 진행 후 빌드해보면, 빌드 시에는 아무 것도 보이지 않지만하이어라키 계층 상에는 무언가가 생겨있는 것을 알 수 있음   이제 각 viewController로 들어가서 TabBarItem 지정해 주면 됨title에 탭바에 들어갈 이름, image는 시스템에서 가져온 이미지(SF Symbols: 애플에서 기본 제공해주는 이미지)→ 최초에 화면이 만들어질 때는 viewDidLoad가 보이지 않으므로 init에 탭바를 만들어줌   탭바가 잘 들어.. 2024. 8. 10.
[강의노트👩🏻‍💻] 스위프트 아키텍처 - MVC와 MVVM 1.  아키텍처란?사전적 의미로는 건축학, 설계학을 뜻한다개발에서 의미하는 소프트웨어 아키텍처는 개발 프로그램의 구조와 뼈대를 의미한다iOS 에서 가장 기본이 되는 아키텍처 패턴은 MVC와 MVVM이 있다   2.  MVC MVC란 Model - View - Controller 를 앞 글자를 따온 것이다각 담당하는 역할은 아래와 같다Model : 데이터 구조 표현 및 데이터 저장 (ex. 연락처앱의 PhoneBook 구조체)View: UI를 표현하기 위한 요소 (ex. UIButton, UITableView..)Controller : Model과 View의 중재자 역할. Model의 데이터를 View에 표현할 수 있도록 도와주며 사용자가 입력하는 Request를 처리한다 🍎 애플이 추구한 MVC 아키텍.. 2024. 8. 2.
[강의노트👩🏻‍💻] 델리게이트 패턴 (Delegate) 1.  델리게이트 패턴이란?델리게이트 패턴이란 어떠한 객체A 에서 하고싶은 일을 다른 객체B 에게 대신 처리하게 만드는 패턴이다*Delegate: 위임자, 대신 수행하는 사람, 대리자프로토콜 타입으로 지정했기 때문에 클래스 내부를 수정하지 않고 위임자만 교체해 주면 되며 수정에 용이한 구조가 장점이다  2.  사용 방법과 예제1️⃣  바리스타 프로토콜 생성클래스가 채택할 프로토콜(Barista)임을 명시하고 이 프로토콜을 만족하는 클래스는 커피를 만드는 책임(makeCoffee)을 가짐import Foundation//클래스가 채택할 프로토콜임을 명시protocol Barista: AnyObject { func makeCoffee() -> String}   2️⃣  Class 생성커피를 만들 Cof.. 2024. 8. 2.
[강의노트👩🏻‍💻] 프로세스와 스레드 / 동기 비동기 / Dispatch Queue 1.  프로세스와 스레드프로세스와 스레드는 모두 컴퓨터에서 작업을 수행하는 흐름과 단위이다실행 중인 iOS 앱을 프로세스라고 부를 수 있으며, 내부에는 여러개의 스레드가 존재한다   1-1.  프로세스앱은 iOS에 올라온 프로그램이며, iOS 앱을 실행하면 프로세스라고 한다(실행하기 위해 메모리에 올라온 프로그램)*앱을 실행하기 전에는 프로그램이지만 앱을 실행하게 되면 프로세스라고 부른다  1-2.  스레드프로세스 내에서 작업을 수행하는 단위이며, 한 개의 프로세스 내에는 여러개의 스레드가 동시에 작업을 수행할 수 있다크게 메인 스레드와 백 그라운드 스레드로 구분할 수 있고 여러개의 스레드를 가지고 동시에 작업하는 것을 멀티 스레딩이라고 한다  유튜브로 보는 예시프로그램: 앱에 설치된 유튜브 앱프로세스:.. 2024. 8. 1.
[강의노트👩🏻‍💻] Xcode Instruments로 메모리릭 잡아내기 아래 코드는 ClassA와 ClassB가 서로를 순환하여 참조하는 상황이다순환참조는 메모리누수가 발생하는 대표적인 상황으로, 버튼 클릭 시 작동되도록 연출했다  엑스코드 상단 Product → Profile 클릭 시 빌드가 진행되며  독에 Xcode Instruments가 나타나게 된다  상단에 Leaks 부분이 메모리 누수 발생을 알 수 있는 부분이다  앱이 실행된 시간별로 메모리 누수가 발생하는지 확인이 가능하며초록색 체크는 아직 발생하지 않았다는 의미이다  버튼 클릭 시 아래와 같이 빨간색 엑스 표시가 나타나게 되며메모리 누수가 발생한 원인을 아래에서 확인할 수 있다 (ClassA, ClassB)  Leaks 에서 Cycles&Roots 로 변경하면 아래 사진과 같이 서로를 순환참조하는 상황을 확인.. 2024. 7. 30.
[강의노트👩🏻‍💻] URLSession 1.  URLSession 이란?URLSessin은 Swift 에서 서버와 통신하기 위해 제공되는 클래스다   2.  URLSession 개념URLSession 을 다루기 위해서는 아래 2가지 개념을 알아야 한다 2-1.  URLSessionConfigurationURLSession으로 커스텀 설정을 한 네트워크 통신을 한다*Configuration이란 환경설정을 의미한다 예) 네트워크 통신의 타임아웃 시간 설정, 네트워크 통신 캐시 정책 설정 등 세팅  URLSession 객체 생성 시 URLSessionConfiguration을 넣어주어야 한다다음과 같이 Default configuration을 활용해 생성 가능let defaultUrlSession = URLSession(configuration ... 2024. 7. 30.