본문 바로가기

iOS

(56)
[iOS] HashTable, Dictionary HashTable, Dictionary 다른 언어를 공부하는 친구들이 HashTable을 말할 때 스위프트를 공부하는 저는 Dictionary를 생각했습니다. 해시란 뭘까?라는 질문에 Dictionary에서 사용하는 키값!! 유일한 키값!! 이라고 생각을 했습니다. (Set에서도) 조금더 파고 들어봐요.. hash란 Swift라는 언어에서 이 hash를 어떻게 이용하는지 스위프트의 Dictionary는 어떻게 구현 됐을까? Dictionary의 내부는 배열로 구성되어 있다고 해요. hasher라는 함수로 데이터를 인덱스화 시켜주고 그 인덱스로 배열에 접근하게 되는거죠! 그래서 딕셔너리의 시간 복잡도는 중복이 안나면 O(1)이 됩니다. 이러한 해셔함수로 만든 인덱스가 중복 된다면 ??! 대표적으로 두가지 ..
[iOS] 의존성 2 by Escaper 앞서 저는 ViewController에 Method Injection을 사용하였습니다. ViewController는 Constructor Injection을 시도했는데 평범한 클래스랑은 init방식이 다른 것 같음 → 실패 라는 문제가 있었는데. 코드 리뷰중 저희 팀원인 "택현"님이 추가적으로 research하여 이 문제를 해결하였습니다. 공유 공유~~ 주입 방법 세가지의 차이점은? Constructor Injection vs Method Injection, Property Injection Method Injection, Property Injection은 비슷하게 동작하는 것 같음!. 런타임에서 오류를 찾음 Constructor Injection은 컴파일단에서 에러를 찾을 수 있음. 컴파일타임에서 오..
[iOS] 의존성 1 by Escaper 프로젝트 중 우리 코드의 의존성 주입에 문제가 있다는 피드백을 받았습니다. 이에 앞서 의존성주입에 대해 먼저 알아 봅시다. 간단스하게! 의존성 A클래스가 내부변수로 B클래스를 가지고 있을때 A클래스는 B클래스에 의존성이 생긴다. A → B 주입 내부가 아닌 외부에서 객체를 생성해서 넣어주는 것을 주입이라고 합니다. 의존성 주입 외부에서 B클래스 객체를 만들어서 A에 넣어주면 의존성을 주입! A → B 현재 우리 코드 현재 ViewController를 만들고 ViewController의 create() 함수를 이용해 ViewModel을 넣는다. ViewController의 create() 함수안에서 ViewModel, UseCase, Repository를 만든다. 문제점 발견 현재 ViewModel을 Vi..
[iOS] Appearance by Escaper 목표 네비게이션 바를 clear하게 사용 현재 상황 appearance.backgroundColor = EDSColor.bloodyBlack.value를 parant와 같게 했음 navigationController.navigationBar.tintColor를 지정해줌 iOS13부터 적용 되는 항목들에 appearance를 넣어줌 navigationBar.compactScrollEdgeAppearance navigationBar.scrollEdgeAppearance (iOS15부터는 compactScrollEdge도 있음.. 팀원 "완식"이 알려준 방법 self.navigationController?.navigationBar.barTintColor = .systemBackground.withAlphaCo..
[iOS] 데이터 순서 보장 by Escaper 문제! - 룸 정보를 받고 그 뒤에 룸 정보에 있는 userID로 정보를 재요청하게 되는데 - userID로 재요청하는 data들의 순서가 보장되자 않는다!! 처음 생각한 데이터 흐름 - 처음 데이터는 전부 위와 같이 순서에 맞게 오는 줄 알고 코드를 구성하였습니다. - append를 써서 배열에 넣고 그대로 사용했죠 ... 가만 생각해 보니 ...... - 가만 생각해보니 데이터가 매번 일정하게 순서가 유지된다는 보장이 없었습니다. - 제가 append를 사용했는데 이는 곧.. 데이터 순서가 뒤틀린다는 의미였습니다. 해결!! 방안! 배열로! - 룸에서 데이터를 받으면 userID갯수 만큼 동적으로 배열을 할당해줍니다. - 그리고 인덱스를 통해 원하는 데이터를 주입합니다.!! 해결 ㅎㅎ ~~ 후기 - 배..
[iOS] - 접근성 - VoiceOver를 도입해보자! VoiceOver란 iOS를 사용할 때 클릭을 하면 버튼, 라벨, 배터리 같은 오브젝트를 음성으로 들을 수 있는 도구입니다. 아이폰 디바이스 설정의 손쉬운 사용에서 설정할 수도 있고 Siri를 통해 "보이스오버 켜줘/꺼줘"로 설정할 수 있습니다. VoiceOver를 사용하게 되면 기존 사용과 다른 제스쳐가 필요합니다. VoiceOver의 사용법을 알아보자. VoiceOver의사용법을 먼저 알아보는 이유는 사용자가 보이스 오버를 어떻게 쓰는지 알면 더 적합하게 개발할 수 있을거라고 생각했습니다. VoiceOver 제스쳐 설명 애플 문서 https://help.apple.com/iphone/11/#/iph3e2e2281 To see this page, you must enable JavaScript. Pou..
[iOS] - KingFisher 리드미 읽기~ 리드미 해석해보자 pod v7.0.0 Kingfisher is a powerful, pure-Swift library for downloading and caching images from the web. Features 비동기 이미지를 다운로드하고 캐싱해줍니다. URLSession을 기반으로 네트워크 또는 로컬에서 이미지를 로딩합니다. 유용한 프로세서와 필터가 제공됩니다. 메모리와 디스크를 다 이용하는 캐시를 합니다. 캐시 동작을 제어할 수 있습니다. 날짜나 사이즈 사용자화 할 수 있습니다. 다운로드를 취소할 수 있고 이전에 다운로드 받은 데이터를 자동으로 재사용하여 성능을 향상시켜 줍니다. 다운로더, 캐싱시스템, 이미지 프로세서가 독립적으로 분리되어 있습니다. 이미지들을 Prefetching해서 캐시..
[iOS] - UserDefaults UserDefaults 사용자의 기본 database이며 앱 실행 중에 key-value 값을 지속적으로 저장합니다 NSObject를 상속받습니다. 주로 사용자 기본 설정의 값들을 저장합니다. Set할 때 Any, floats, doubles, integers, Boolean values, and URLs. 타입을 기본적으로 제공합니다. Collection타입도 제공합니다. Array, Dictionary, Data타입 NotificationCenter에서 didChangeNotification이 제공 removeObject(forKey: String)으로 제거 가능. 파일 시스템의 위치로도 사용가능 특이한 점 float, doubles, integers, Boolean은 Value를 get할 때 key..