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'."..

article thumbnail
[iOS/Swift] Quick Help 생성 방법 (문서화, 마크업, 주석)
Etc. 2023. 2. 9. 23:12

Quick Help (설명서) Quick Help는 코드 기능 설명서입니다. 간단한 예시로 만약 오래전 만든 코드를 지금 다시 보게 된다면 무슨 기능을 했는지 헷갈리거나 협업 시 나는 알고 있지만 다른 팀원들이 코드의 기능을 헷갈려할 때 이와 같은 상황에서 손쉽게 코드의 기능을 알 수 있는 일종의 설명서입니다. 일단 퀵 헬프가 뭔지 보고 가시죠. 아래 그림과 같이 코드에 대한 정보를 나타내는 창입니다. (Summary, Discussion, Parameters...) 이것들을 작성하는 방법에 대해 알아봅시다. Quick Help 단축키 사용법 일단 기본적으로 Xcode 내부에서 자동으로 퀵 헬프를 만들어주는 단축키가 존재합니다. 만들고 싶은 코드를 클릭한 뒤 command + option + / 를 사용..

article thumbnail
[iOS/Swift] UIColor (RGB대신 HEX Color 이용하기)
UIKit/Cheat Sheet 2023. 2. 9. 17:11

UIColor 주로 UIColor를 생성 시 컬러를 지정하는 방법은 Red, Greed, Blue로 0~255까지의 숫자로 표현하는 RGB컬러를 사용합니다. UIColor(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) 보통 인터넷에서 색상을 찾을 때 RGB컬러대신 Hex Code Color로 주로 표기가 돼있는데요. 여기서 Hex Color Code란? RGB 방식의 색상 코드 표기법입니다. # 뒤에 붙는 여섯 자리 혹은 세 자리 숫자로 색상을 표기하는 방식이죠. 6자리인 경우 두 자리씩 끊어서 각각 Red, Green, Blue를 나타낸다고 하네요. 자세한 건 패스... UIColor Extenstion 기존 UIColor 사용 시, 마음에..

article thumbnail
[iOS/Swift] 프로토콜 CaseIterable (열거형에서 모든 case를 배열로 다루기)
Xcode/Swift 문법 2023. 2. 9. 00:38

프로토콜 CaseIterable 공식문서 는 이쪽에 있습니다. 설명이 친절하니 한 번은 들어가서 보세요. 일단 결론은 열거형의 각각 모든 case들을 한데 묶어서 컬렉션인 배열로 만들어 줍니다. 각가의 요소를 배열로 바꾸어 준다니 유연하게 사용이 가능해질 거 같네요! 내부 구조를 한번 봅시다. public protocol CaseIterable { /// 타입의 모든 값을 콜렉션(배열로) 나타내는 타입입니다. associatedtype AllCases : Collection = [Self] where Self == Self.AllCases.Element /// 콜렉션(배열)의 모든 값을 나타냅니다. static var allCases: Self.AllCases { get } } 사용하는 곳을 열거형이라 ..

article thumbnail
[iOS/Swift] 이니셜라이저(init)와 고차함수
Xcode/Swift 문법 2023. 2. 8. 06:05

이니셜라이저 예제 아직 다루지 않은 이니셜라이저 관련 내용인데 몰랐던 내용을 예제와 함께 간단히 써볼게요. init 사용 및 고차함수 관련 내용입니다. 신기방기합니다. 문법은 다음기회에... 정리해서 올릴게요 오늘부터 저는 커피 장사를 하고 있습니다. 일단 장사를 하기 앞서 커피 메뉴판을 만들어 줬어요. struct Menu { let coffee: String let size: String } 메뉴도 만들었으니 손님 이름과 함께 주문을 받아야겠죠? struct CoffeeOrder { let name: String let order: Menu } 그런데 갑자기 손님이 들이닥쳐서 많은 주문을 처리하기 힘들어서 한눈에 보기 위해 주문 리스트도 만들어 줬어요. struct CoffeeOrderList { l..

article thumbnail
[iOS/Swift] UINavigationBar 사용 방법
UIKit/Swift 2023. 2. 7. 16:35

이번글은 스토리보드 대신 코드로 작성할 때 내비게이션 바의 모양 및 기타 설정 관련한 일종의 Cheat Sheet을 써보겠습니다. 설명은 이전글 [iOS/Swift] UINavigationController 살펴보기 를 참고해 주세요. UINavigationController 생성 방법 UINavigationBar를 사용하기 위해선 일단 UINavigationController를 생성해야 됩니다. SceneDelegate에서 작성 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene ..

반응형