일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- human interface guidelines
- SWIFT
- 부트캠프
- NumberFormatter
- NotificationCenter
- Structures and Classes
- 책후기
- 스위프트
- View Life Cycle
- SWIFTUI
- Mock
- viewcontroller
- contentInset
- roundingMode
- Modality
- IOS
- Failed to register bundle identifier
- @available
- Info.plist
- 야곰아카데미
- delegation
- UIResponder
- 아이폰
- 스타트업주니어로살아남기
- Navigation
- Codegen
- 독서후기
- mvvm
- xcode
- 독후감
- Today
- Total
목록Software Engineering (137)
호댕의 iOS 개발

알고리즘 문제를 풀다가 for 문을 거꾸로 돌아야 하는 상황이 있었다. 물론 배열에서 for 문을 돈다면 배열에 .reversed()를 하여 for 문을 돌리면 됐지만 문제는 단순히 특정 범위를 돌아야 할 때였다. 나는 1부터 for문을 돌리고 싶은 것이 아니라.. 마지막 숫자부터 1까지를 돌리고 싶었다... 내가 마주한 문제는 다음과 같다. 초등학교 때(?) 배웠던 최대공약수와 최소공배수를 구하는 문제였는데 구하는 것은 간단했지만 막상 코드로 분기를 하려니... 마냥 쉽지만은 않았다. 이때 만약 m이 n으로 나뉘지 않는다면 n부터 1까지 내려가면서 나눠지는 값이 있는지 찾아야 했다. 이때 1부터 올라가면서 하게 된다면 공약수를 찾을 순 있지만 최대 공약수는 찾을 수 없는 문제가 있었다. 그렇다면 이때 ..

캡쳐를 할 수 있는 도구나 gif 편집 도구를 보면 다음과 같은 것들을 볼 수 있다. 위 사진처럼 이미지를 자르지 않고 비율 그대로 이미지의 크기만 줄이고 싶다면 어떻게 해야할까? 일단 코드를 먼저 살펴보자. extension UIImage { func resize(multiplier: CGFloat) -> UIImage { let newWidth = self.size.width * multiplier let newheight = self.size.height * multiplier let size = CGSize(width: newWidth, height: newheight) let render = UIGraphicsImageRenderer(size: size) let renderImage = rend..

앱을 사용하다 보면 앱에 필요한 이미지를 업로드를 올릴 일이 발생한다. 흔히 사용하는 카카오톡에서도 그렇고 당근마켓에 팔 물건을 올리기 위해서도 앱에 사진을 올려야 한다. 그렇다면 이럴 때는 뭘 사용해서 사용자가 이미지를 올릴 수 있도록 해야 할까? 일단 이미지를 올릴 수 있도록 하는 것부터 알아보자. UIImagePickerController 일단 사진첩이나 직접 찍은 사진의 이미지를 불러올 수 있도록 하는 것은 UIImagePickerController를 활용할 수 있다. A view controller that manages the system interfaces for taking pictures, recording movies, and choosing items from the user's me..

FileManager ⌨️ 알아두면 좋을 단축키 cmd + shift + . → 숨김 파일 보기 cmd + shift + g → 폴더 찾기 폴더 생성 → touch 파일명.확장자 / echo “내용" > 파일명.확장자명 📦 사용한 메서드 정리 디렉토리의 주소를 찾는 경우 urls(for: in:) : FileManager의 인스턴스 메서드 directory: 찾을 path directory를 작성한다. 다양한 SearchPathDirectory를 가지고 있다. domainMask: 찾을 file system의 도메인을 작성한다. userDomainMask: 사용자의 홈 디렉토리 localDomainMask: 기기에서 모든 사람이 item을 설치할 수 있는 곳 networkDomainMask: 네트워크에서..

개발을 처음 접하다보면 거의 제일 먼저 만나는 것이 반복문이다. Swift에서도 While, repeat-while, for, forEach가 반복문으로 존재한다. 오늘은 이런 반복문 중에서 for-in과 forEach의 차이에 대해 살펴 보고자 한다. 성능상 차이 일단 둘의 성능 차이는 거의 없다고 볼 수 있다. 실제로 Swift Github에 들어가서 확인해보면 forEach의 내부 구현이 for-in으로 구현되어 있다는 것을 볼 수 있다. @_inlineable public func forEach( _ body: (Element) throws -> Void ) rethrows { for element in self { try body(element) } } 즉 for-in과 forEach가 성능상으..

(fileManager 학습을 위해 Application Support, Documents, tmp에 파일을 생성해봤습니다) FileManager를 사용하면 Xcode에서 손쉽게(?) 파일을 생성하고 내부 컨텐츠를 수정 및 추가도 할 수 있다. 삭제 또한 가능하다. 그럼 어떻게 FileManager를 통해 파일을 생성하고 관리하는지 알아보자~~ ⌨️ 알아두면 좋을 단축키 cmd + shift + . → 숨김 파일 보기 cmd + shift + g → 폴더 찾기 폴더 생성 → touch 파일명.확장자 / echo “내용" > 파일명.확장자명 🗂 파일 위치 Application Support 라이브러리는 일단 숨김 파일로 되어 있기 때문에 사용자로 들어가서 cmd + shift + .를 해줘야 한다. doc..

이번 주는 컬렉션 뷰, URLSession에 대해 중점적으로 공부했다. 테이블 뷰도 배울 때 어렵다고 생각했었는데 컬렉션 뷰가 테이블 뷰보다 복잡한 것 같다. 그래도 컬렉션 뷰는 테이블 뷰와 닮은 점도 많고 공통된 메서드도 많아 공부하다 보면 잘 알게 되겠지? ViewController와 TableViewController를 사용하는 것의 차이 일단 UITableVIewController를 사용하면 커스텀을 하여 사용하기가 어려워진다. 즉, 화면에 TableView만 있다면 TableViewController를 사용하는 것이 좋지만, TableView 이외에 다른 복합적인 view가 있는 경우 UIViewController를 사용하는 것이 낫다. 하지만 항상 기획이 변경될 수 있는 만큼 UIViewCon..
JSON 객체에서 데이터 타입의 인스턴스를 디코딩해주는 JSONDecoder에는 기본적으로 decoding에 대한 Strategy가 존재한다. 물론 CodingKey를 사용하여 어떤 식으로 JSON 파일을 디코딩할 지 정해줄 수도 있다. 하지만 일일이 CodingKey를 정해줘야 하는 만큼 만약 이미 정해진 Strategy가 있다면 훨씬 간단하게 디코딩을 해줄 수 있다. KeyDecodingStrategy 일단 먼저 KeyDecodingStrategy를 살펴보자. KeyDecodingStrategy는 JSONDecoder에 정의된 열거형으로 그 종류는 3가지가 있다. useDefaultKeys: 디코딩할 때 key의 name을 변경하지 않는다. convertFromSnakeCase: Snake-Case로..