Danny의 iOS 컨닝페이퍼
반응형
article thumbnail
[iOS/Swift] 검색창(UISearchController)과 결과창(searchResultsController) 사이의 공간 없애기!
UIKit/Cheat Sheet 2023. 2. 22. 23:55

문제 이와같이 검색창과 결과 테이블 사이의 공간이 생기는 문제가 발생 해결법 UISearchController가 있는 컨트롤러에서 extendedLayoutIncludesOpaqueBars = true override func viewDidLoad() { super.viewDidLoad() let searchTableVC = SearchTableViewController() let searchController = UISearchController(searchResultsController: searchTableVC) self.navigationItem.searchController = searchController // ⭐️ 확장 레이아웃의 불투명 막대 사용 extendedLayoutIncludesOp..

article thumbnail
[iOS/Swift] 유닛 테스트(Unit Test) 사용 방법
UIKit/Swift 2023. 2. 20. 21:41

유닛 테스트(Unit Test) 사용하려는 기능이 개발자의 의도에 맞게 동작하는지 테스트를 하는 작업입니다. Unit Test에는 간단하게 "FIRST"라는 원칙이 있다고 합니다. 속도 (Fast) 느린 테스트는 개발자가 코드를 수정하고 결과를 확인하기까지 시간이 많이 걸리므로 생산성을 저하시키죠. 따라서 유닛 테스트에서는 빠른 속도로 테스트를 수행할 수 있도록 설계해야 합니다. 독립적 (Independent / Isolated) 유닛 테스트는 각각의 테스트가 서로 독립적으로 실행될 수 있어야 합니다. 이것은 특정 테스트의 결과가 다른 테스트에 영향을 미치지 않고 독립적으로 실행한다는 것을 의미합니다. 이러한 방식으로 작성된 유닛 테스트는 코드 변경에 대해 신속하게 반응할 수 있습니다. 반복적 (Repe..

article thumbnail
[iOS/Swift] 옵셔널(Optional, ?) 정리
Xcode/Swift 문법 2023. 2. 20. 19:10

Optional이란? Swift에서 안정적인 코드를 작성하기 위해 필요한 매우 중요한 방법 중 하나입니다. Optional은 값이 있을 수도 있고 없을 수도 있는 변수의 데이터 타입입니다. 표현식을 한번 봅시다. var myNumber: Int? = nil 이와 같이 변수를 선언할 때 "?"를 사용하여 Optional을 표현합니다. 이 경우 변수에 값을 할당하지 않으면 기본값으로 nil을 반환하죠. 그러나 보통 앱을 실행하여 nil값이 나오게 되면 에러가 발생합니다. 따라서 해당값에 접근하기 위해 Optional Unwrapping 과정을 거쳐야 합니다. 옵셔널 언래핑(Optional Unwrapping)은 옵셔널의 nil 여부를 확인하고 만약에 값이 있다면 해당값을 사용하는 과정입니다. 이를 통해 n..

article thumbnail
[iOS/Swift] 디버깅을 통해 메모리 누수를 찾아보자(Debug, Memory Leaks)
UIKit/Swift 2023. 2. 17. 20:23

메모리 누수(Memory Leak) 란? 프로그램에서 사용한 메모리를 해제하지 않고 계속 사용하는 상황을 의미합니다. 두 객체 이상이 서로를 참조할 때 참조가 끊기지 않는 문제점(Retain Cycle)이 발생하게 되죠. 이런 상황은 시스템의 리소스가 부족해지거나 앱이 충돌하는 등의 문제를 발생시킵니다. 메모리 누수를 해결하려면 기본적으로 누수가 발생하는 객체를 해제해야 합니다. 객체를 참조하는 변수를 nil으로 설정하거나 weak, unowned와 같은 키워드를 통해 참조를 관리할 수 있죠. 디버깅 방법 확인 방법으로는 이와 같이 2가지 방법이 있습니다. Debug Memory Graph 그리고 Profile에서 Leaks Instrument 사용방법에 대하여 알아봅시다. 일단 코드는 이와 같습니다. ..

article thumbnail
[iOS/Swift] String Format 사용법 (정수, 소수점, 문자열 변환)
Xcode/Swift 문법 2023. 2. 14. 20:26

String Format String(format: String, _ arguments: CVarArg...) format에서는 %d , %f, %@ 이와 같은 기호를 넣어 변형이 가능하며, arguments의 여러 인수들은 $1, $2... 과 같이 취급하여 사용도 가능하다. 정수형 변환 (%d) Int형식을 변환할 때 사용합니다. (오직 정수만 사용가능) let num1 = 123 let num2 = 456 // 변화를 확인하기 위해 []로 구분을 지어줌, 사용 시 [] 제거! String(format: "[%d]", num1) // [123] // 숫자가 범위를 넘어가면 앞에 공백 (왼쪽 정렬) String(format: "[%5d]", num1) // [ 123] // 숫자가 범위를 넘어가면 뒤에..

article thumbnail
[iOS/Swift] MVVM 패턴의 Data Binding에 대해서 알아보자! (Closure, Observable, Combine)
UIKit/Swift 2023. 2. 14. 16:16

MVVM 란? Model-View-ViewModel로 구성된 아키텍처 패턴 중 하나로, 데이터를 처리하는 모델(Model), 사용자에게 보여지는 UI인 뷰(View), 뷰에 바인딩되어 모델과 뷰 사이를 이어주는 뷰-모델(View Model)로 분리한 패턴이다. 특징으로 Model과 View뿐만 아니라 Binding을 통하여 View와 View Model 간의 의존성까지 최소한 형태로, 데이터 처리 로직과 UI 간 상호 영향이 적어 모듈화를 통해 재사용성을 높이고 및 역할별로 Unit Test가 용이해진다. 대신 설계가 복잡하고 간단한 프로젝트에서는 View Model 설계가 오히려 능률이 떨어질 수 있다. 또한 Data Binding의 과정이 메모리효율이 안 좋다고 한다. 참고 위키 📚 Model 데이터..

article thumbnail
[iOS/Swift] addingPercentEncoding (URL이 nil 일 경우, URL Encoding, CharacterSet)
Xcode/Swift 문법 2023. 2. 11. 19:40

addingPercentEncoding 지정된 CharacterSet에 포함되지 않은 문자열을 Percent Endcoing의 문자로 대체하여 새로운 문자열로 반환합니다. 일단 URL 같은 경우 공백이나 한글이 포함되면 리턴값으로 nil이 나오게 되는데요. 이때 Percent Endcoing을 통해 변환시켜 인식이 가능하도록 도와줄 수 있죠. 선언은 아래와 같이 돼있습니다. func addingPercentEncoding(withAllowedCharacters allowedCharacters: CharacterSet) -> String? 여기서 CharacterSet란 유니코드 호환 문자의 집합을 나타냅니다. 여러 문자를 그룹화하여 사용을 편리하게 분류해 놓은 구조체입니다. CharacterSet에서 U..

article thumbnail
[iOS/Swift] URL, URLComponents 빠개기
Xcode/Swift 문법 2023. 2. 11. 15:02

URL URL은 특정 리소스의 위치를 나타냅니다. 보통 Sring을 통하여 접근합니다. 영어나 특수한 문자만 사용이 가능하고 한글이나 공백을 포함 시 리턴값이 nil이 나오게 됩니다. let urlStr = "https://ios-daniel-yang.tistory.com/search?keyword=iOS&page=1" let url = URL(string: urlStr)! 만약 URL에 한글 및 공백이 필요한 경우에는 String.addingPercentEncoding 변환을 통해 사용이 가능한데요. [iOS/Swift] addingPercentEncoding (URL이 nil 일 경우, URL Encoding, CharacterSet) 를 참고해 주세요. 구조 scheme 접근할 방법을 정의해 둔 프..

article thumbnail
[iOS/Swift] plist의 값 얻는 방법 및 Github에서 중요한 정보 숨기는 방법(API Key, Bundle, gitignore)
UIKit/Cheat Sheet 2023. 2. 10. 06:24

extension으로 plist 불러오는 방법 이전글 [iOS/Swift] 개발 환경에 따라 각각의 다른 plist의 저장된 API Key 값 받아오기 에서도 자세히 다루기는 했지만 이번에는 간단하게 plist 값을 얻는 방법 및 gitignore까지 다뤄보겠습니다. 준비 작업 먼저 plist 파일을 추가해 주세요. 기본 plist 파일은 Dictionary 형식으로 되어있습니다. 배열도 가능 plist파일을 생성 후 원하는 이름으로 Key 값을 만들어주고 Value 값으로 사용할 API Key 값을 넣어 만들어 줍니다. 일단 이렇게 하면 준비 작업은 끝났습니다. 코드 하드코딩을 할 것이기 때문에 ⭐️ 위에서 작업한 plist파일 이름과 키 값을 정확하게 입력해 주셔야 합니다. ⭐️ extension B..

article thumbnail
[iOS/Swift] 개발 환경에 따라 각각의 다른 plist의 저장된 API Key 값 받아오기
UIKit/Cheat Sheet 2023. 2. 10. 05:01

개발 환경에 따라 서로 다른 plist 값 읽는 방법 plist 생성 Debug , Production(Release) 모드에서 서로 다른 값을 받기 위해 plist 2개를 준비합니다. 코드 /// plist를 읽을 수 있게 초기화 시킴 class BaseENV { let dict: NSDictionary init(resourceName: String) { guard let filePath = Bundle.main.path(forResource: resourceName, ofType: "plist"), let plist = NSDictionary(contentsOfFile: filePath) else { fatalError("Couldn't find file '\(resourceName).plist'."..

반응형