[RxSwift]Relay 버튼 활성화
iOS_Swift.zip 2022. 9. 24. 10:25

구현해야하는 기능 → 특정 조건이 만족(아래 2가지 조건 True)이 되었을 때 닉네임 중복 체크 통과 → 해당 서버 API를 통해서 Bool 타입으로 값을 가져옴 텍스트 뷰 → Text가 있는지 Bool 타입으로 체크 기존 구현 didSet을 통해 닉네임 중복에 대한 변수 isCheckNickname(Bool type)과 UITextView의 Text가 있는지에 대한 변수 isFillTextView가 true인지 guard문을 통해 체크를 해주어, 둘 다 true일 경우에는 버튼이 활성화되게 구현해주었다. var isCheckNickname: Bool = false { didSet { guard isCheckNickname == true, isFillTextView == true else { // 버튼..

[RxSwift]UITextField 정규식
iOS_Swift.zip 2022. 9. 10. 17:59

나의 구현 🐝 MVVM패턴을 적용했기 때문에 구현부는 ViewModel에서 이루어졌다. 매개변수로는 Struct를 정의해주어 해당 타입으로 Input을 만들어주었고, 반환 값도 Struct형식으로 바꾸는데 안에 요소는 Driver로 구현을 해주었다. View Model Input & Output // View Model /// Input struct RegularExpressionInput { var titleText: Observable } /// Output struct RegularExpressionOutput { var titleTextCheck: Driver } Input 구조체는 View Controller에서 rx.text로 바인딩을 해줄것이니 Observable타입으로 정의를 해준다. Ou..

[Swift]SnapKit + Then CollectionView Cell Size
iOS_Swift.zip 2022. 9. 10. 17:05

Swift 초보의 구현이니, 가볍게 참고만 해주세요 😅 기존 구현 👨🏻‍💻 기존 Collection View의 Cell Size를 정의할 땐 UICollectionViewDelegateFlowLayout 프로토콜을 채택해 아래와 같이 구현을 했었다. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: 100, height: 100) } 이게 무슨 문제가 될까? 위처럼 구현은 할 수 있으나 extension을 통해 프로토콜을 채택하고, 구현하기..

[Swift]Status Bar 색상 변겅
iOS_Swift.zip 2022. 4. 21. 14:13

Issue 🤷🏻‍♂️ Status Bar 색상을 변경하는데 프로젝트 설정에서 Light Content로 설정을 했는데도 불구하고 변경이 되지 않았다. Solved 📝 여러 자료를 찾아본 끝에 해결을 할 수 있었다 😂 여러 방법들이 있었지만 서기의 해결방법은 아래와 같다. 반드시 아래 2가지를 모두 설정해야만 변경이 된다는 점 ❗️ 과정 ▾ Project 설정 바꾸기 가장 먼저 프로젝트 설정(General)에서 Status Bar Style을 Light Content로 설정해주었다. Info 설정 우선 프로젝트 설정을 하면 Status bar style 이라는 설정이 생기며 Value로는 Light Content가 생긴다. 그 아래가 중요하다 📌 View controller-based status bar ..

[iOS]Strong과 weak 참조 방식
iOS_Swift.zip 2022. 2. 27. 19:17

메모리 참조 방식을 살피기 전에 ARC를 짚고 넘어가보려고 합니다. ARC ❓ 정의 ▾ 컴파일 시 코드를 분석해서 자동으로 retain, release 코드를 생성해주는 것 retain retain count(= reference count) 증가를 통해 현재 Scope에서 객체가 유지되는 것을 보장합니다. release retain count(= reference count) 감소시킵니다. retain 후에 필요 없을 때 release 합니다. 참조된 횟수를 추적해 더 이상 참조되지 않는 인스턴스를 메모리에서 해제해 주는 것 참조 카운트가 0이 되면 자동으로 메모리 해제된다고 보면 됩니다. 0이 될 때 deinit을 호출해서 메모리 해제를 시킵니다. 자동으로 RC를 관리해주기 때문에 메모리 해제에 대한..

[iOS]Protocol
iOS_Swift.zip 2022. 2. 20. 00:23

Protocol 🤷🏻‍♂️ https://docs.swift.org/swift-book/LanguageGuide/Protocols.html Protocols — The Swift Programming Language (Swift 5.6) Protocols A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. The protocol can then be adopted by a class, structure, or enumeration to provide an actual implementation of tho docs.swi..

[iOS]NotificationCenter
iOS_Swift.zip 2022. 2. 18. 17:04

Swift 초보의 코드이므로, 참고만 해주시면 감사합니다 😅 NotificationCenter 📑 정의 ▾ Notification Center 그대로 번역하면 "등록된 관찰자에게 정보를 브로드캐스트 할 수 있도록 하는 알림 디스패치 메커니즘"이라고 합니다. 쉽게 말해 Notification이 오면 Observer Pattern(옵저버 패턴)을 통해서 등록된 옵저버들에게 Notification을 전달하기 위해 사용하는 클래스라고 보면 됩니다. 우리는 Notification도 들어봤을 텐데, Notification과 NotificationCenter 무슨 차이가 있는지는 아래 Notification에 대한 정의를 볼게요. Notification 그대로 번역하면 "등록된 모든 관찰자에게 알림 센터를 통해 방송..

[iOS]App Thinning
iOS_Swift.zip 2022. 2. 16. 13:08

App Thinning - 앱 시닝 정의 ▾ 애플리케이션이 디바이스에 설치될 때, 앱 스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 하는 설치 최적화 기술을 의미합니다. 최소한의 디스크 사용과 빠른 다운로드를 제공할 수 있습니다. 구성으로는 슬라이싱(slicing), 비트코드(bitcode), 주문형 리소스(on-demand resource)가 있습니다. 구성 ▾ 슬라이싱(Slicing) ▾ 다양한 기기와 운영체제 버전에 대하여 여러 가지 app bundle의 변형(variants)을 생성하고 전달하는 과정입니다. 변형(variants)은 실행가능한 아키텍처, 리소스만 포함합니다. 앱의 전체 버전을 계속 개발하고 앱스토어 커넥트(App Store Connect)에 업로드하게 되면 앱스토어는 앱이 ..

[iOS]lazy 키워드
iOS_Swift.zip 2022. 2. 16. 10:42

About Lazy 정의 ▾ 이 시퀀스와 동일한 요소를 포함하지만 맵 및 필터와 같은 일부 작업이 지연 구현되는 시퀀스입니다. 쉽게 말해 lazy 변수는 처음 사용되기 전까지는 연산이 되지 않는다고 볼 수 있습니다. 고려 사항 ▾ lazy는 반드시 var와 함께 쓰여야 합니다. 기본적으로 lazy로 선언된 변수는 초기에는 값이 존재하지 않다가 이후에 값이 생기는 것이기 때문에 let으로 선언은 될 수가 없습니다. Struct, Class에서만 사용이 가능합니다. Computed Property에는 lazy 키워드를 사용할 수 없습니다. lazy는 처음 사용될 때 메모리에 값을 올리고 그 이후부터는 계속해서 메모리에 올라온 값을 사용합니다. 사용할 때마다 값을 연산하는 Computed Property에는 ..

[iOS]Frame과 Bounds의 차이
iOS_Swift.zip 2022. 2. 14. 23:20

정의 Frame "상위 뷰의 좌표계에서 뷰의 위치와 크기를 설명하는 프레임 사각형" Bounds "자체 좌표계에서 뷰의 위치와 크기를 설명하는 경계 사각형" 기능 Frame 핵심은 "Super View(상위 뷰)의 원점으로부터 얼만큼 떨어져 있는지를 나타낸다." 위의 사진을 참고해서 핵심을 살펴보면 바로 이해할 수 있다. 또 한가지 더 있다. 뷰의 사이즈를 보는 관점이 다르다. 아래 사진을 살펴보자. 위 사진처럼 Frame은 View의 Size를 오른쪽과 같이 고유의 사각형으로 측정이 된다. Bounds 핵심은 "해당 View가 이동하지 않고, Sub View(하위 뷰)를 반대방향으로 이동을 시킨다." view1.bounds.origin.x = 10 view1.bounds.origin.y = 10 위 코..

[iOS]Escaping Closure(@escaping)
iOS_Swift.zip 2022. 2. 12. 14:49

@escaping 📑 About @escaping ▾ escaping을 접하다 ▾ func fetchUser(completion: @escaping(User) -> Void) { ... } 위의 코드처럼 통신이나 비동기 처리를 할 때 이러한 코드를 본 적이 있습니다. completion 클로저를 파라미터로 작성하면서 @escaping이 붙은 걸 보면서 어떨 때 사용하는지 느낌만 알고, 정확히 어떨 때 사용하며 무엇인지 몰랐습니다. 정의 ▾ Escaping Closure 클로저가 함수의 인자로 전달됐을 때, 함수의 실행이 종료된 후 실행되는 클로저입니다. Non-Escaping Closure 함수의 실행이 종료되기 전에 실행되는 클로저입니다. 비교하기 ▾ Non-Escaping Closure func fe..

[iOS]SDWebImage 에러
iOS_Swift.zip 2022. 2. 11. 13:35

SDWebImage 모듈 설치 에러 이슈 🤷🏻‍♂️ 평소 라이브러리 설치처럼 cocoapods를 이용해 SDWebImage 라이브러리를 설치했다. import SDWebImage를 하면 모듈을 찾을 수 없다는 에러문이 떴다. 나의 노력 ▾ 새로고침 워크스페이스 삭제 및 재설치 pod update SDWebImage 삭제 및 재설치 재부팅 해결책 📓 온갖 자료를 살펴보던 중 cocoapods에 라이브러리 선언에 코드를 추가해주었다. pod 'SDWebImage', :modular_headers => true 어떠한 이유인지는 모르겠지만 아래에 사이트를 참고해보면 좋을 것 같습니다. 저와 같은 에러가 뜬다면 당황하지 말고, 위에 코드로 podfile을 수정해보시길...🥲 참고 ▾ https://stackov..